У меня есть приложение для Android, которое использует множественность из Apache httpcomponents. Приложение загружает файл с помощью HTTP-запроса в php-скрипт. Однако файл, который я загружаю (.ogg), заканчивается в $ _POST вместо $ _FILES и выглядит как двоичный файл, хотя я могу ошибаться.
У меня есть расширение chrome rest, и я использовал его для POST-запроса multipart / form-data с точно таким же файлом .ogg, и файл оказался в правильном месте ($ _FILES).
Код Android выглядит следующим образом:
// Send the file to the server.
// Create HTTP objects.
// Request.
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(ACTION);
// Response.
HttpResponse httpResponse;
httpClient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
MultipartEntity mpEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
ContentBody cbFile = new FileBody(mediaFile, "audio/ogg");
mpEntity.addPart("file", cbFile);
httpPost.setEntity(mpEntity);
// Execute.
httpResponse = httpClient.execute(httpPost);
// Evaluate the response.
int statusCode = httpResponse.getStatusLine().getStatusCode();
// Make sure everythings okay.
if (statusCode == 200) {
HttpEntity resEntity = httpResponse.getEntity();
if (resEntity != null) {
String body = EntityUtils.toString(resEntity);
resEntity.consumeContent();
Log.d("APP_STATUS", body);
}
}
httpClient.getConnectionManager().shutdown();
И очень простой PHP-скрипт:
<?php
echo "\$_POST";
var_dump($_POST);
echo "\$_FILES";
var_dump($_FILES);
?>
Ответ при использовании приложения:
Ответ при использовании расширения Chrome REST:
Если у кого-то есть понимание того, в чем я эпично терплю неудачу, пожалуйста, дайте мне знать.
Попробуйте использовать построитель сущностей
HttpEntity mpEntity = MultipartEntityBuilder.create()
.addBinaryBody(
"file", cbFile, ContentType.create("audio/ogg"), cbFile.getName())
.build();
Других решений пока нет …