Мое приложение для 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-сервера?
Вы уверены, что файл, который вы отправляете, не имеет 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;
}
Увидеть ссылка.
Других решений пока нет …