Faça upload de arquivos e dados para o servidor a partir do aplicativo Android

Você deseja usar uma solicitação http para enviar dados e arquivos a um servidor da web. Um exemplo típico disso seria editar seu perfil em uma rede social, você está enviando dados e, normalmente, um arquivo (seu avatar).

Seguinte trecho deve estar dentro de um AsyncTask ou similar, ele deve não estar dentro do segmento interface do usuário, para as últimas versões do Android vai simplesmente matar seu aplicativo se você fizer http solicitações sobre o principal segmento.

Necessita das seguintes importações:

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;

E aqui está o código

HttpClient httpClient = new DefaultHttpClient();
StringBuilder builder = new StringBuilder();
try {
HttpPost request = new HttpPost(TapabookUrls.urlSubirTapa);

MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
entity
.addPart("String_Data_Parameter_Name", new StringBody("String_Value"));
entity
.addPart("Numeric_Data_Parameter_Name", new StringBody( NumericValue +""));

/****************************/

File f = new File(Environment.getExternalStorageDirectory()
+ File.separator + "test.jpg");
f
.createNewFile();
//write the bytes in file
FileOutputStream fo = new FileOutputStream(f);
fo
.write(outStream.toByteArray());
// remember close the FileOutput
fo
.close();
FileBody picBody = new FileBody(f, "image/jpeg");

/****************************/

entity
.addPart("File_Parameter_Name", picBody);
request
.setEntity(entity);
HttpResponse response = httpClient.execute(request);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity responseEntity = response.getEntity();
InputStream content = responseEntity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));

String line;
while ((line = reader.readLine()) != null) {
builder
.append(line);
}
json
= builder.toString();
Tapabook.d( "SubeTapaAsincrono json : " + json);
}

} catch (IllegalStateException e) {
Log.e( "FileUpload IllegalStateException ", e.getMessage() );
} catch (IOException e) {
Log.e( "FileUpload IOException ", e.getMessage() );
} catch (ParseException e) {
Log.e( "FileUpload ParseException " + e.getMessage() );

} finally {
// close connections
httpClient
.getConnectionManager().shutdown();
}