Проблема: при попытке загрузить файлы размером более ~ 50 Мб, $ _FILES возвращает пустой массив.
Я пытаюсь изменить ограничения на php (много комбинаций), но это бесполезно ..
мой класс в Java:
public void upload() throws Exception {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(this.url);
try {
FileBody bin = new FileBody(this.file);
@SuppressWarnings("deprecation")
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("file", bin);
httppost.setEntity(reqEntity);
System.out.println("Requesting : " + httppost.getRequestLine());
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httppost, responseHandler);
System.out.println("responseBody : " + responseBody);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.getConnectionManager().shutdown();
}
}
мой код PHP для печати массива для респауна:
<?php
ini_set('file_uploads', 1);
ini_set('max_file_uploads', '9999999999M');
ini_set('post_max_size', '2000M');
ini_set('max_input_time', 3600);
ini_set('max_execution_time', 3600);print_r($_FILES);
?>
Вы можете попытаться добавить MIME-тип файла при создании FileBody. Например:
FileBody bin = new FileBody(this.file, "application/octect-stream");
Другое решение заключается в использовании HttpURLConnection клиент, который проще в использовании и менее подвержен ошибкам. Кроме того, Google рекомендует использовать его для новых приложений.
Одна или другая сторона разрывает http-соединение, используемое действием POST.
Вы знаете, какая сторона (клиент или сервер)
Если вы не знаете, возможно, вам следует попытаться исключить сервер, используя CURL, чтобы сделать M-Multipart Post одного из ваших больших (+50) файлов.
Вызовите CURL для загрузки и добавьте ключ -v для подробного журнала, чтобы вы могли проанализировать процесс.
Android POST action на файлы размером 50 — 100 мегабайт должен работать нормально.
Поскольку вы делаете большие загрузки, вам нужен клиент, которому вы можете отправлять заголовки «ожидайте 100, продолжить» и где вы можете нанять кодирование передачи по частям вместе с потоком на стороне клиента, который может предоставить данные в буфер, который обернут чем-то вроде byteArrayEntity
apache или nginX в конфигурации std должны справиться с этим. Если ваш php процесс заканчивается, возможно, вам нужно проверить phpinfo.