Android: получить файл с сервера PHP по HttpResponse

Мое приложение для Android успешно отправляет файлы на удаленный сервер php. До тех пор, пока сервер не ответит, отправив обратно простую строку:

Код PHP

// if a file was posted
if($_FILES && $_POST){

if(move_uploaded_file($file, $dir)) {
echo "File successfully sent to server.";
}

Я могу получить этот текстовый ответ с этим кодом:

Java-код

HttpResponse response = httpClient.execute(httpPost);
HttpEntity resEntity = response.getEntity();

// get server response
if (resEntity != null)  {
return EntityUtils.toString(resEntity).trim();
}

Сейчас я не хочу получать простой текстовый ответ, но я ожидаю целый файл. У меня мало опыта и я застрял

Код PHP

if(move_uploaded_file($app, $upload_file . $file_ending)) {
readfile($res_file); // read file and write it output buffer
}

Java-код

HttpResponse response = httpClient.execute(httpPost);
HttpEntity resEntity = response.getEntity();

if (resEntity != null)
return String.valueOf(resEntity.getContentLength());

getContentLength возвращает 14, что определенно не является размером файла в байтах.

Как получить файл в ответ от PHP-сервера?

1

Решение

Вы уверены, что файл, который вы отправляете, не имеет 14 байтов? Убедитесь, что полученный вами ответ не является ошибкой. Если вы получаете законный ответ, то должен отобразиться response.getEntity (). GetContentLength () «количество байтов содержимого».

Что касается PHP-части, то вот то, что другие успешно использовали:

if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}

Увидеть ссылка.

1

Другие решения

Других решений пока нет …