2013-10-17 22 views
2

我需要上傳的Android至少16個MB的文件到我的服務器,但事實證明,當文件exced 9 MB的下一個錯誤 - >如何從Android上傳大文件而不發生OutOfMemory錯誤?

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) 

這是代碼的一部分,如果我可以張貼整個代碼的neccesary

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

感謝

大衛

+0

你可以跳過* ByteArrayOutputStream嗎?這是罪魁禍首。也許有一個可以禁用的「重試」選項? – user2864740

+0

嗨用戶,我是新手在Java中,真的我不知道如何跳過這個過程。謝謝你的評論 – David

回答

0

也許你可以啓用流模式,以避免複製上傳的文件ŧ手機的記憶完全發送之前。

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