Android JAVA $ FILE在大于~50 mb的文件时返回空

时间:2014-10-15 21:23:25

标签: java php android file-upload multipartentity

问题:尝试上传大于~50 mb的文件,$ _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代码为respawn打印数组:

<?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);
?>

2 个答案:

答案 0 :(得分:0)

您可以在创建FileBody时尝试添加文件的mime类型。例如:

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

另一种解决方案是使用更易于使用且不易出错的HttpURLConnection客户端。此外,Google recommends将其用于新的应用程序。

答案 1 :(得分:0)

一方或另一方正在破坏POST操作正在使用的http连接。

您知道哪一方(客户端或服务器)

如果您不知道,也许您应该尝试使用CURL来排除服务器以执行您的一个大(+50)文件的M-Multipart Post。

调用CURL上传并添加-v开关以进行详细日志,以便分析该过程。

对50 - 100 meg文件的Android POST操作应该可以正常工作。

由于您正在进行大量上传,因此您需要一个可以发送标题的客户端&#34;期望100继续&#34;你可以在哪里使用chunked transfer encoding以及一个客户端线程,该线程可以向缓冲区提供数据,缓冲区由byteArrayEntity

之类的东西包裹 std配置上的apache或nginX应该处理这个问题。如果您的php进程异常终止,那么您可能需要检查phpinfo。

相关问题