Vou assumir que você conhece o caminho e o nome do arquivo da imagem que deseja enviar. Adicione esta string ao seu NameValuePair
uso image
como o nome da chave.
O envio de imagens pode ser feito usando as bibliotecas HttpComponents . Faça o download do último binário HttpClient (atualmente 4.0.1 ) com dependências, pacote e cópia apache-mime4j-0.6.jar
e httpmime-4.0.1.jar
no seu projeto e adicione-os ao seu caminho de construção Java.
Você precisará adicionar as seguintes importações à sua classe.
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
Agora você pode criar um MultipartEntity
para anexar uma imagem à sua solicitação POST. O código a seguir mostra um exemplo de como fazer isso:
public void post(String url, List<NameValuePair> nameValuePairs) {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(url);
try {
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
for(int index=0; index < nameValuePairs.size(); index++) {
if(nameValuePairs.get(index).getName().equalsIgnoreCase("image")) {
// If the key equals to "image", we use FileBody to transfer the data
entity.addPart(nameValuePairs.get(index).getName(), new FileBody(new File (nameValuePairs.get(index).getValue())));
} else {
// Normal string data
entity.addPart(nameValuePairs.get(index).getName(), new StringBody(nameValuePairs.get(index).getValue()));
}
}
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost, localContext);
} catch (IOException e) {
e.printStackTrace();
}
}
Espero que isso ajude você na direção certa.
FileBody
tipo de mímica desejado. Exemplo:new FileBody(new File (nameValuePairs.get(index).getValue()), "image/jpeg")
Desde
MultipartEntity
que foi preterido . Por favor veja o código abaixo.fonte
A biblioteca loopj pode ser usada diretamente para esta finalidade:
http://loopj.com/
fonte
Eu lutei bastante tentando implementar a postagem de uma imagem do cliente Android para o servlet usando httpclient-4.3.5.jar, httpcore-4.3.2.jar, httpmime-4.3.5.jar. Eu sempre recebia um erro de tempo de execução. Eu descobri que basicamente você não pode usar esses frascos com Android, pois o Google está usando a versão mais antiga do HttpClient no Android. A explicação está aqui http://hc.apache.org/httpcomponents-client-4.3.x/android-port.html . Você precisa obter o jar httpclientandroidlib-1.2.1 da biblioteca cliente http android . Altere suas importações de or.apache.http.client para ch.boye.httpclientandroidlib. Espero que isto ajude.
fonte
Eu costumo fazer isso no segmento de manipulação da resposta json:
Se você precisar fazer transformações na imagem, crie um Drawable em vez de um Bitmap.
fonte