2014-09-30 42 views
0

我試圖上傳一個大文件使用HttpsURLConnection(與其他令牌),如果我上傳它在一個塊,顯然,我得到一個OutOfMemory異常。
我試圖按照這個例子:http://www.cuelogic.com/blog/android-code-to-upload-download-large-files-to-server-2/
但現在我得到了「系統調用期間的I/O錯誤,管道損壞」錯誤。使用HttpsURLConnection上傳大文件(多部分)

我看到這是一個已知的問題,但我沒有找到任何好的解決方案。我該如何解決這個問題?

+0

請搜索答案在這裏張貼問題之前!請參閱http://stackoverflow.com/questions/2017414/post-multipart-request-with-android-sdk – Rohit 2014-09-30 07:05:01

+0

謝謝,但我沒有搜索,沒有找到答案。請注意,我的問題是發送大文件,而不是創建多部分請求 – Sharas 2014-09-30 10:42:20

回答

0

嘗試這種方式

public void connectForMultipart() throws Exception { 
    con = (HttpURLConnection) (new URL(url)).openConnection(); 
    con.setRequestMethod("POST"); 
    con.setDoInput(true); 
    con.setDoOutput(true); 
    con.setRequestProperty("Connection", "Keep-Alive"); 
    con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); 
    con.connect(); 
    os = con.getOutputStream(); 
} 

public void addFormPart(String paramName, String value) throws Exception { 
    writeParamData(paramName, value); 
} 

public void addFilePart(String paramName, String fileName, byte[] data) throws Exception { 
    os.write((delimiter + boundary + "\r\n").getBytes()); 
    os.write(("Content-Disposition: form-data; name=\"" + paramName + "\"; filename=\"" + fileName + "\"\r\n" ).getBytes()); 
    os.write(("Content-Type: application/octet-stream\r\n" ).getBytes()); 
    os.write(("Content-Transfer-Encoding: binary\r\n" ).getBytes()); 
    os.write("\r\n".getBytes()); 

    os.write(data); 

    os.write("\r\n".getBytes()); 
} 
public void finishMultipart() throws Exception { 
    os.write((delimiter + boundary + delimiter + "\r\n").getBytes()); 
} 

您可以要求通過在manifest使用

android:largeHeap="true" 

使用更多的內存。

此外,您可以使用本機內存(NDK & JNI),因此您實際上繞過了堆大小限制。

這裏有一些職位方面看:

,這裏是爲它做了一個庫:

快樂編碼

關於Maven的

+0

謝謝,但我的問題是與大文件,這種解決方案不會解決這個問題...因爲它上傳文件在一個塊... – Sharas 2014-09-30 10:41:43

相關問題