Envio de formulário Android com Bitmap para Servidor PHP

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /Envio de formulário Android com Bitmap para Servidor PHP

Envio de formulário Android com Bitmap para Servidor PHP

Vinícius Thiengo
(10743) (44)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloManual de DevOps: como obter agilidade, confiabilidade e segurança em organizações tecnológicas
CategoriaEngenharia de Software
Autor(es)Gene Kim, Jez Humble, John Willis, Patrick Debois
EditoraAlta Books
Edição1ª
Ano2018
Páginas464
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Opa! Blz?

Código de 20% de desconto no site da Editora NOVATEC: THIENGO

Nesse vídeo mostro como enviar um formulário do Android para um servidor PHP, porém dessa vez mostro como fazer para enviar também nesse formulário uma imagem (Bitmap). Muitos seguidores do blog solicitaram que fosse apresentado como enviar um bitmap para um servidor PHP, então mesmo já tendo mostrado como enviar um formulário do Android para um servidor PHP achei muito necessário voltar e abordar esse assunto, pois realmente não é trivial trabalhar com o envio de imagens do Android para outros servidores, atividade que por sinal envolve redimensionamento de imagem, correção de orientação, transformação para binário e então transformação desse binário para uma entidade na base 64.

O vídeo ficou um pouco longo, pois apesar de pouco codificar nele mostrei os passos necessários para se pegar a imagem do dispositivo (do próprio SDCard ou tirando a foto pela camera mesmo), alterar o tamanho dela, verificar se a orientação da imagem está correta, caso não esteja, corrigi-la. Então pegar o tipo mime da imagem (PNG, JPEG, GIF), salvar esses dados no objeto e prepará-lo para ser enviado para o servidor. Além de mostrar a codificação necessária no PHP para pegar a imagem em Base64, decodificar e então salvar um arquivo binário para criar a imagem no servidor. Mas enfim se sua dificuldade era enviar o Bitmap para uma servidor PHP o vídeo pode lhe ajudar a fazer isso. Fique ligado no uso da class Base64 que não necessita de seu entendimento por completo, basta saber que no caso do vídeo ela transformará nosso array de bytes em uma entidade na base 64. Sem mais delongas vou deixa-lo assistir ao vídeo.

O link para download do projeto se encontra logo abaixo no post incluindo o código PHP que salva os dados no servidor.

Segue links de alguns conteúdos que podem lhe ajudar a entender melhor esse exemplo:

Enviando e Recebendo Dados Entre Activities em Android

Entendendo a Thread Principal de Uma APP Android

runOnUiThread, Atalho de Acesso a Thread Principal no Android

Acessando Imagens do SDCard e Colocando na APP Android

Utilizando a Câmera do Smartphone em Sua APP Android

Simples Formulário na APP Android Comunicando com Servidor Web PHP

Segue links das páginas apresentadas no vídeo:

Página da classe Bitmap na sessão do método createBitmap() no site oficial do Android

Página da classe Matrix no site oficial do Android

Página da classe ExifInterface no site oficial do Android

Página do projeto Base64

Vlw

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Obtendo e Apresentando Rotas no OpenStreetMap AndroidObtendo e Apresentando Rotas no OpenStreetMap AndroidAndroid
MarkerInfoWindow no OpenStreetMap AndroidMarkerInfoWindow no OpenStreetMap AndroidAndroid
Parcelable no Android, Entendendo e UtilizandoParcelable no Android, Entendendo e UtilizandoAndroid

Compartilhar

Comentários Facebook

Comentários Blog (44)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
Thiago Melo (1) (0)
10/08/2016
Fala!
Cara gostaria de uma ajuda.
Estou tentando salvar uma imagem em um diretório do Hostinger, porém não estou conseguindo faze-lo.

Na verdade estou criando um app (android) que irá enviar uma imagem para uma script php e esse script terá que salvar a imagem em um diretório do meu servidor Hostinger e a URL da imagem no banco de dados.

Já tentei de todas as formas (Base64, Retrofit) e não consegui.

Certamente estarei fazendo alguma coisa de errado. Poderia me ajudar nesse caso?

Sou novato em dev e estou estudando.

Obrigado.
Responder
Vinícius Thiengo (1) (0)
17/08/2016
Fala Thiago, blz?
Vc já tentou das duas formas que eu poderia lhe indicar, base64 e Retrofit. Minha dúvida é se a imagem ao menos está chegando no backend Web, está? A versão do Retrofit para envio de imagem que vc utilizou foi a mesma que utilize aqui (http://www.thiengo.com.br/library-retrofit-2-no-android ). Abraço
Responder
30/06/2016
Cara quando eu passo para o meu projeto esses pacotes não importam
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
Responder
Vinícius Thiengo (0) (0)
01/07/2016
Fala Israel, blz?
Mts dessas classes não mais estão disponíveis.
Utilize o Retrofit 2.0 (http://www.thiengo.com.br/library-retrofit-2-no-android ). Abraço
Responder
01/07/2016
Poxa pensei que era ensinando a mesma coisa desse post porem usando android studio. Estou em um projeto que tenho que fazer examente o que esse seu post faz, com a diferença de ser 4 imgs. Vc poderia fazer um mais atualizado pq esse que vc me indicou não é a mesma coisa... abs :v
Responder
Vinícius Thiengo (0) (0)
02/07/2016
Israel, com o retrofit vc consegue enviar imagens de uma maneira até mais tranquila. Código similar ao vídeo desse post será difícil, pois muitas das entidades utilizadas aqui não mais estão disponíveis no Android. Abraço
Responder
14/08/2015
Parabéns pelo belo trabalho, Thiengo.
Fiz a implementação e deu tudo certo.
Estou enviando do celular para o servidor PHP uma imagem tipo jpg, porém perde muita a qualidade da imagem.
As fotos são de documentos que não são coloridos, somente preto e branco.
Sabe algo a fazer?
Responder
Vinícius Thiengo (0) (0)
15/08/2015
Fala Rogerio, blz?
Quando utilizei esse algoritmo tb tive problemas algumas vezes, infelizmente o envio de imagens do Java para um servidor Web não é tão trivial como em PHP. Dê uma olhada nesse tuto (http://www.androidhive.info/2014/12/android-uploading-camera-image-video-to-server-with-progress-bar/ ), pelo menos na parte de uso do AndroidMultiPartEntity, pois aparentemente essa é a melhor maneira de envio. Dê uma olhada nessa lib tb (https://android-arsenal.com/details/1/2161 ). Abraço
Responder
Carlos Malta (2) (0)
20/07/2015
Bom dia Thiengo. Parabéns pelo seu trabalho e fico grato por vc disponibilizar seu conhecimento que tem me ajudado bastante. Tenho muita dificuldade na programação mas estou aqui na luta pra aprender. Assisti essa video aula e consegui colocar pra rodar perfeitamente, porem gostaria de saber como selecionar e enviar mais de uma imagem ao mesmo tempo, se possivel mostra-las na tela pelo Galley e depois envia-las para o servidor PHP juntamente com o formulario. Se tiver algum video que possa me ajudar ficarei muito grato. Desde ja agradeço!
Responder
Vinícius Thiengo (1) (0)
21/07/2015
Fala Carlos Malta, blz?
Para o pick de multiplas imagens, veja essa resposta do stackoverflow (http://stackoverflow.com/a/27376429/2578331 ), pode ser que lhe ajude. Para enviar as várias imagens selecionadas, recomendo que envie primeiro o form sem dados binários (imagens, áudios, ...) e logo depois retorne o id do registro gerado para esses dados no banco de dados remoto. Depois de ter obtido o id comece a enviar as imagens para o servidor Web, porém no background, dentro de um Service, pois assim não vai bloquear a tela do user com um ProgressBar interminável devido ao envio de imagens (conteúdo pesado) no form. Abraço
Responder
01/06/2015
Primeiramente parabéns pelo trabalho. Coloquei pra rodar e funcionou perfeitamente no android 2.3.7, upou as imagens e tudo, mas se eu rodar no android L eu só consigo fazer upload tirando foto. Quando tento fazer upload pela galeria ele chega abrir a galeria, daí quando seleciona a imagem dá erro e fecha o app.
Fiz uns Log.d() no código pra ver até onde ele estava indo e onde dava erro. Quando tentei dar uns Log.d() nessa "imgString" ele dava erro... deve estar aí o problema, mas não sei como resolver
No logcat aparece o seguinte:
http://pastebin.com/Fdk8jfMY
Responder
Vinícius Thiengo (0) (0)
02/06/2015
Fala Zé, blz?
Dê uma olhada nesse link (http://stackoverflow.com/questions/27038051/pick-photo-from-gallery-in-android-5-0 ), veja a primeira resposta, porém antes leia a dúvida e o finalzinho dela dê uma atenção especial, pois é a informação do porquê do problema. Se essa solução passar, porém somente para o Android 5 e superior, utilize o Build.VERSIONS.SDK_INT, para definir qual Pick_Photo script utilizar de acordo com a versão do Android em uso. Abraço
Responder
05/03/2015
Boa tarde Thiengo, parabéns e obrigado pelo compartilhamento dos seus conhecimentos... Notei que num aplicativo que fiz enviando também imagens, quando a orientação do celular está ligada, depois da foto tirada ou mesmo dela escolhida via cartão, se eu giro o celular eu a perco, some do imageview e também não é enviada... Outra coisa, já tentou enviar vídeos usando o Base64? Obrigado.
Responder
06/03/2015
Quanto a orientação achei na documentação do Android que é próprio dele recriar a atividade quando gira, e que é necessário nesse caso armazenar e recuperar...  Alguns casos é até melhor (como eu fiz) bloquear para não girar (da menos trabalho) rs
Responder
Vinícius Thiengo (0) (0)
06/03/2015
Fala Ronaldo, blz?
Realmente se não utilizar ou um SaveInstanceState (http://www.thiengo.com.br/otimizando-sua-app-android-com-onsaveinstancestate , http://www.thiengo.com.br/onsaveinstancestate-bitmap-e-serializable-no-android-correcao ), ou um configChanges em sua Activity (http://www.thiengo.com.br/entendendo-e-utilizando-o-configchanges-no-android ), ou um ApplicationClass (http://www.thiengo.com.br/application-class-no-android-entendendo-e-utilizando ) estendida vc não consegue continuar com o ImageView, na verdade vc não consegue ficar com nenhum dos objetos já criados se não utilizar algumas dessas técnicas citadas a cima, pois toda a Activity é reconstruida quando vc muda a orientação do aparelho e a APP não tem uma orientação travada via AndroidManifest (portrait ou landscape, que não recomendo a trava, pois há usuários que gostam de consumir o conteúdo da APP em orientação diferente da escolhida como trava). O onSaveInstanceState() pode ser uma boa escolha.

Esse script é bom, mas tive alguns problemas quando enviava imagens em conexões fracas, as vezes salvava a imagem pela metade... bad job! Não tentei enviar vídeos com ela... hj estou estudando mais Java para poder trabalhar melhor com bytes (Bitmap, ...) e Thread, pois para mim essas são as partes que mais dão problemas no Android e que mais podem deixar sua APP eficiente se souber trabalhar com elas (além dos layouts XML serem bem construidos), principalmente quando vc quer enviar algo como vídeo para um servidor Web, tem várias libs que ajudam a buscar, porém a enviar não conheço uma. Assim que desenvolver um script show de bola para envio eu coloco aqui no blog. Abraço
Responder
06/03/2015
Compreendi, obrigado
Responder
Gustavo (0) (0)
09/02/2015
Ola Thiango, tudo blz? Cara fiz tudo direitinho como vc falou no video mas esse Base64 não esta funcionando. Tudo funciona direitinho ele até esta salvando as imagens no diretório que eu criei em meu servidor mas eu não consigo visualizar as mesmas sempre que eu clico pra visualizar a imagem aparece essa mensagem "O windows Photo não pode abrir esta imagem por que o arquivo parece esta danificado, corrompido ou é muito grande". Eu não acredito que seja por causa do tamanho pois as imagens não passam de 80KB, então será algum problema no Base64? o que será que eu estou fazendo errado? lembrando que ele esta colocando as imagens no diretorio e tem até tamanho como eu falei, mas eu não consigo visualiza-las. Me ajude por favor. Abraço.
Responder
Vinícius Thiengo (1) (0)
10/02/2015
Fala Gustavo, blz sim.
Está colocando a imagem com o formato que ela era no APP (jpeg, png, gif, ...)? Mt provavelmente esse é o problema, pois como falo no vídeo, além do String base64 que enviamos temos de enviar tb em outra variavel post o formato real da imagem para realizarmos a conversão correta no server. Ve se está fazendo isso. Abraço
Responder
Gustavo (0) (0)
11/02/2015
Opa Thiengo, dei mais uma analisada aqui e sim cara estou fazendo direitinho pegando o tipo mime e enviando separado da imagem msm assim não esta funcionando, da uma olhada aqui em meu codogo php e ve se estou fazendo algo errado.


if (isset($_REQUEST['image']))
    {
                $binaryImage = base64_decode($_REQUEST['image']);
$mimeImage = $_REQUEST['mime'];

//DEFINIÇÕES DA MUSICA

//$pasta = 'Musicas';
$extencoes = array('png', 'jpg');

if (!in_array($mimeImage, $extencoes))
{ // SE O TIPO MIME N FOR IGUAL AOS TIPOS PERMITIDOS NO NOSSO ARRAY DE EXTEÇÃOES....
                 echo "formato invalido, apenas jpg ou png";

}
else
{

$imageName = 'image-'.uniqid().'.'.$mimeImage;

$file = fopen('./Images/'.$imageName, 'wb');
        fwrite($file, $binaryImage);
fclose($file);

$sqlimage = "UPDATE `users` SET `images` = '".$imageName."' WHERE `username` = '".$username."' ";
}

                 if($db->query($sqlimage)){

  $out = SUCCESSFUL;

}
                    else{

                       $out = FAILED;

}




}
else // SE O NOSSO PRIMEIRO SQL, NÃO DER CERTO $out RECEBE FAILED
{
$out = FAILED;
}
    break;


É isso ja tentei de tudo mas n consigo descobrir o erro, se poder me ajude por favor. Abraço
Responder
Vinícius Thiengo (1) (0)
12/02/2015
Aparentemente está ok o código. Vc está utilizando $_RESQUEST[...], se não me engano $_REQUEST está depreciado, utilize $_POST[...]. Faça um testes antes, salve o nome da imagem e o conteúdo $binaryImage dentro de um arquivo txt para ver se os dados estão realmente chegando ao servidor. Se possível verifique as propriedades do arquivo gerado para ver se está como imagem mesmo e com conteúdo não igual a 0 bytes. Abraço
Responder
Gustavo (0) (0)
12/02/2015
Sim cara eu tentei com o $_POST e não funcionou as outras coisas como nome e e-mail estão vindo direitinho  só não a imagem, verifique as propriedades como vc falou e aparentemente sim esta vindo como uma imagem não está com 0 bytes a unica diferença que eu notei é que ele não ta me dando as dimensões as imagens que estão vindo pelo o seu codigo vem com as dimensões 300 x 300 ja as do meu codigo não estão vindo com as dimensões e no meu código java eu estou fazendo igualzinho como vc fez para alterar as dimensões da imagem. Será que isso tem alguma coisa haver com esse erro?
Responder
Vinícius Thiengo (1) (0)
13/02/2015
Gustavo, faça o seguinte teste se possível, envie uma imagem pequena em bytes e não altere as dimensões, só para ver se o problema está nessa parte do script. Ai volte aqui para falar do resultado. Abraço
Responder
Gustavo (2) (0)
13/02/2015
Nada cara, continuou a mesma coisa o problema não é esse não mas eu fiz uma coisinha aqui , testei o meu codigo java no seu php e funcionou perfeitamente o problema ta no meu script php mesmo, por enquanto eu vou ficar usando o seu codigo que ta perfeito mas eu vou continuar estudando aqui o que que esta acontecendo com o meu código que aparentemente não tem nada de errado ai quando eu descobrir o qual foi o erro eu volto aqui pra te falar. De qualquer jeito obrigado seu blog tem me ajudado bastante vc é fera. Abraço cara.
Responder
02/01/2015
Olá Thiengo tudo na paz? sera que poderia me da uma ajuda?

Quado tiro a foto salva no SdCard corretamente porém não mostra no imageView. No "onActivityResult" a "Intent data" esta chegando null sabe o que pode ser?

desde já agradeço a atenção =D

Obs.: estou testando diretamente no aparelho.
Responder
Vinícius Thiengo (0) (0)
03/01/2015
Fala José, tudo na paz sim
Como vc que salvou no SDCard vc não precisa de dados do Intent retornado, vc pode acessar a foto direto pelo path que vc a gravou e então carrega-la como bitmap e coloca-la no ImageView. Abraço
Responder
09/12/2014
Olá Thiengo,
primeiramente parabéns pelo blog,está sendo muito útil no meu aprendizado.
Gostaria de saber como habilitar a função de recorte na imagem.
Desde já grato!
Responder
Vinícius Thiengo (0) (0)
10/12/2014
Fala Hemerson, blz?
Não tentei cortar bitmap direto no Android ainda, mas encontrei duas discussões sobre esse assunto no StackOverflow e aparentemente eles tem a solução na primeira resposta de cada discussão, segue os links, de repente ajuda:

http://stackoverflow.com/questions/18232034/how-can-i-crop-a-bitmap-for-imageview

http://stackoverflow.com/questions/15789049/crop-a-bitmap-image

Abraço
Responder
17/12/2014
Fala Thiengo, deu certo.
Obrigado!
Responder
31/10/2014
Olá Thiengo.
no seu exemplo ele grava os dados da imagem em txt, como eu faria pra salvar no banco mysql o meu atributo é um varchar.
Responder
Vinícius Thiengo (0) (0)
31/10/2014
Fala Francisco, blz? Vc grava a imagem em um diretório de seu servidor (mostrei isso no vídeo) e o nome da imagem ao invés de gravar no txt vc grava no MySQL (estou assumindo que vc manja de MySQL, certo?), depois para acessar vc envia somente o nome da imagem com o respectivo endereço de seu dominio na Web com o endereço do diretório onde se encontra a imagem... no Android vc concatena todos os endereços incluindo o nome da imagem (com o mime type dela no final - jpg, png, gif) e com um ImageLoader vc pode baixar a imagem de seu Servidor na Web para algum ImageView ou algo do genero... essa é uma forma de fazer. Abraço
Responder
04/11/2014
Obrigado,
assistir novamente o vídeo e identifiquei onde estava errando.
Responder
21/10/2014
Fala Thiengo eu queria enviar uma imagem para um banco de dados MySQL seria da mesma maneira q enviar para um servidor PHP?
Responder
Vinícius Thiengo (0) (0)
21/10/2014
Fala Stan, blz?
Bom, essa é uma maneira, existem outras maneiras. O que precisa ver que o script envia a imagem para o Servidor Web, pois o Android mesmo não sabe o que está no backend do servidor, ele apenas faz a imagem virar uma String base64 e envia. Mas vc esta guardando a imagem (byte) dentro do MySQL (tipo BLOB)? Ou está guardando o caminho da imagem no MySQL e a imagem em algum diretório do servidor (que considero a melhor opção)? De qualquer forma vc precisará de uma linguagem backend (PHP, ou Java, ou...) pois o Android não comunica diretamente com um bd remoto. Abraço
Responder
28/10/2014
Eu posso usar um servlet pra receber e enviar para o BD?
e eu to gravando em um servidor so o caminho
Responder
Vinícius Thiengo (0) (0)
29/10/2014
Fala Stan, blz?
Não vejo problemas em utilizar um servlet em seu servidor para isso, mesmo tendo um minimo contato com o backend-server em Java, se não me engano já fiz isso, porém o contexto é com Ajax e não com Android, mas o funcionamento é o mesmo. Abraço
Responder
24/09/2014
para enviar uma imagem sem exibir ela no aplicativo e necessário fazer o redimensionamento? Pois to querendo fazer essa parte ja no servidor onde fica mais facil pra mim.
Responder
Vinícius Thiengo (0) (0)
24/09/2014
Fala Rafael, blz?
Na verdade não é, mas a ideia é vc tentar já otimizar o tamanho da imagem ali mesmo no APP, pois de forma incoerente as cameras dos dispositivos de hj tendem a gerar imagens com um tamanho grande (em bytes) e a qualidade da conexão com a Web não é tão boa se não for uma WiFi, logo redimensionar a imagem é uma forma de diminuir esse tamanho em bytes, como tb retirar a qualidade da imagem tb é uma excelente escolha, pois se não me engano até 50% menos de qualidade o olho humano ainda não consegue perceber. Pegar a imagem e enviar sem nenhum tratamento pode ser mt pesado para o usuário até mesmo na conexão WiFi, pois alguns aparelhos têm camera HD. Abraço
Responder
Wiliam (0) (0)
18/08/2014
Oi Thiengo tudo bom? tenho acompanhado todas as suas vídeo aulas e tenho aprendido muito com vc, estou estudando esse vídeo agora, mas só tem um probleminha, quando eu faço o download do projeto e importo no meu eclipse os arquivos .xml vem todos em branco! já tentei importar umas quatros vezes e o eclipse sempre me da esse erro


"[2014-08-18 20:31:40 - ExemploSendImageForPhp] Project has no target set. Edit the project properties to set one.
[2014-08-18 20:31:41 - ExemploSendImageForPhp] Project has no target set. Edit the project properties to set one.
[2014-08-18 20:32:15 - ExemploSendImageForPhp] Parser exception for /ExemploSendImageForPhp/AndroidManifest.xml: Fim prematuro do arquivo.
[2014-08-18 20:32:17 - ExemploSendImageForPhp] Parser exception for /ExemploSendImageForPhp/AndroidManifest.xml: Fim prematuro do arquivo."

Sabe dizer o que pode estar acontecendo? Desde já obrigado.
Responder
Vinícius Thiengo (0) (0)
18/08/2014
Fala Wiliam, blz?
Então, se não me engano a solução (uma possível) é vc ir copiando e colocando na mão mesmo. Dei uma olhada no AndroidManifest.xml para entender esse "Fim prematuro" e não vi nada de anormal. Tente fazer assim copiando e colando para ver se vai. As vezes é bugueira da importação do Eclipse. Abraço
Responder
wiliam (1) (0)
19/08/2014
Valeu cara, eu acho q foi bug do eclipse mesmo, fiquei tentando aqui, apagando e importando de novo ate que de repente ele resolveu importar direito rs, mas valeu cara muito obrigado, seu blog é show de bola
Responder
Diego Melo (2) (0)
07/06/2014
Muito bom cara.
Parabéns pelo blog que sempre apresenta um ótimo conteúdo

Estou evoluindo no dev Android e sempre que tenho dúvidas dou uma passada por aqui e
como estou acompanhando a literaratura do Lecheta suas postagens sempre veem como um grande reforço e tem me ajudado muito.

Valeu!
Responder
Vinícius Thiengo (0) (0)
07/06/2014
Vlw Diego. Abraço
Responder
22/05/2014
Agradeço por vc esta compartilhando a sua experiencia, Parabéns cara.. Tdos os dias assisti-o os seus videos..
Responder
Vinícius Thiengo (0) (0)
23/05/2014
Vlw Tiago, abraço
Responder