Я знаю, что этому посту уже пару лет, но я бы хотел поделиться своим решением, используя MultiPartEntity с здесь , доступным как часть загрузки HttpClient. Я использовал версию 4.2.5.
Первоначально я использовал процесс, аналогичный описанному выше, который работал хорошо, пока я не начал получать ошибки памяти, когда я начал поддерживать загрузку видео. Я исследовал много постов здесь и получил много хороших идей. Я использовал декомпилятор Java , доступный здесь , чтобы посмотреть на код в файле Jar, чтобы выяснить, как все собрать вместе.
//filepath is passed in like /mnt/sdcard/DCIM/100MEDIA/VIDEO0223.mp4
String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
String extension = fileName.substring(fileName.lastIndexOf(".") + 1);
String json = "{your_json_goes_here}";
File media = new File(filePath);
URI uri = your_uri_goes_here;
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(uri);
StringBody jsonBody = new StringBody(json, "application/json", null);
FormBodyPart jsonBodyPart = new FormBodyPart("json", jsonBody);
String mimeType;
if (requestCode == Constants.ACTION_TAKE_VIDEO) {
mimeType = "video/" + extension;
} else {
// default to picture
mimeType = "image/" + extension;
}
FileBody fileBody = new FileBody(media, mimeType, "ISO-8859-1");
FormBodyPart fileBodyPart = new FormBodyPart(fileName, fileBody);
MultipartEntity mpEntity = new MultipartEntity(null, "xxBOUNDARYxx", null);
mpEntity.addPart(jsonBodyPart);
mpEntity.addPart(fileBodyPart);
post.addHeader("Content-Type", "multipart/mixed;boundary=xxBOUNDARYxx");
post.setEntity(mpEntity);
HttpResponse response = httpClient.execute(post);
InputStream data = response.getEntity().getContent();
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(data));
String responseLine;
StringBuilder responseBuilder = new StringBuilder();
while ((responseLine = bufferedReader.readLine()) != null) {
responseBuilder.append(responseLine);
}
System.out.println("Response: " + responseBuilder.toString());