有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在没有OutOfMemory错误的情况下从Android上传大文件?

我需要从安卓系统上传至少16MB的文件到我的服务器,但当文件超过9MB时,下一个错误就会出现->

10-17 05:21:57.600: E/AndroidRuntime(2185): java.lang.OutOfMemoryError
10-17 05:21:57.600: E/AndroidRuntime(2185):     at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
10-17 05:21:57.600: E/AndroidRuntime(2185):     at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
10-17 05:21:57.600: E/AndroidRuntime(2185):     at libcore.net.http.RetryableOutputStream.write(RetryableOutputStream.java:61)
10-17 05:21:57.600: E/AndroidRuntime(2185):     at java.io.DataOutputStream.write(DataOutputStream.java:98)

这是代码的一部分,如果需要,我可以发布整个代码

      String fileName = sourceFileUri;

      HttpURLConnection conn = null;
      DataOutputStream dos = null;  
      String lineEnd = "\r\n";
      String twoHyphens = "--";
      String boundary = "*****";
      int bytesRead, bytesAvailable, bufferSize;
      byte[] buffer;
      int maxBufferSize = 1 * 1024 * 1024; 
      File sourceFile = new File(sourceFileUri); 

谢谢

大卫


共 (1) 个答案

  1. # 1 楼答案

    也许你可以启用流媒体模式,以避免在发送之前将上传的文件完全复制到手机内存中

            // set the request mode as POST
            urlConnection.setRequestMethod("POST");
    
            // disable using cache.
            urlConnection.setUseCaches(false);
    
            // enable Output/Input.
            urlConnection.setDoOutput(true);
            urlConnection.setDoInput(true);
    
            // enable the streaming mode.
            urlConnection.setChunkedStreamingMode(128 * 1024);