Android JAVA $ _FILE возвращается пустым в файлы размером более ~ 50 МБ

Проблема: при попытке загрузить файлы размером более ~ 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);
?>

0

Решение

Вы можете попытаться добавить MIME-тип файла при создании FileBody. Например:

FileBody bin = new FileBody(this.file, "application/octect-stream");

Другое решение заключается в использовании HttpURLConnection клиент, который проще в использовании и менее подвержен ошибкам. Кроме того, Google рекомендует использовать его для новых приложений.

0

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

Одна или другая сторона разрывает http-соединение, используемое действием POST.

Вы знаете, какая сторона (клиент или сервер)

Если вы не знаете, возможно, вам следует попытаться исключить сервер, используя CURL, чтобы сделать M-Multipart Post одного из ваших больших (+50) файлов.

Вызовите CURL для загрузки и добавьте ключ -v для подробного журнала, чтобы вы могли проанализировать процесс.

Android POST action на файлы размером 50 — 100 мегабайт должен работать нормально.

Поскольку вы делаете большие загрузки, вам нужен клиент, которому вы можете отправлять заголовки «ожидайте 100, продолжить» и где вы можете нанять кодирование передачи по частям вместе с потоком на стороне клиента, который может предоставить данные в буфер, который обернут чем-то вроде byteArrayEntity

apache или nginX в конфигурации std должны справиться с этим. Если ваш php процесс заканчивается, возможно, вам нужно проверить phpinfo.

0

По вопросам рекламы [email protected]