2012-03-16 114 views
2

我從我的Android應用程序發送視頻和音頻文件到Wampserver,其中一些可能會變得非常大,當文件大小大約超過1MB時,我傾向於獲得OutofMemory問題。使用HTTP POST發送文件> 1MB

我將每個文件分別轉換爲字節流。我認爲字節流太大,因此OutofMemory

如何阻止此錯誤的發生?

回答

3

使用鏈接最大信號這裏建議:

Uploading files to HTTP server using POST on Android.

然後我發現這個Out of Memory error in android修復錯誤。

替換:

while (bytesRead > 0) 
{ 
    outputStream.write(buffer, 0, bufferSize); 
    bytesAvailable = fileInputStream.available(); 
    bufferSize = Math.min(bytesAvailable, maxBufferSize); 
    bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
} 

有:

while (bytesRead > 0){ 
    bufferSize = Math.min(bytesAvailable, maxBufferSize); 
    byte byt[]=new byte[bufferSize]; 
    fileInputStream.read(byt); 
    bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
    outputStream.write(buffer, 0, bufferSize); 
} 
+0

您是否通過此修復解決了您的問題 – Maxim 2012-03-19 12:51:54

+0

@Maxim是我修復了它。 upvoted你的答案,因爲它部分解決了我的問題。 – Neeta 2012-03-19 20:24:53

+0

謝謝,但我只是好奇它是否適用於你或不像我一樣沒有時間寫一個服務器部分來找出爲什麼它仍然沒有工作。分數不重要 – Maxim 2012-03-20 14:40:11

3
+0

這是否代碼分割文件分成部分或東西嗎?雖然我不認爲這是一個問題。我將每個文件分別轉換爲字節流。我認爲字節流太大,因此OutofMemory .. – Neeta 2012-03-16 23:19:20

+0

它給出連接的OutputStream並將文件讀入流中。 outputStream = new DataOutputStream(connection.getOutputStream();服務器需要將該流寫入某個地方如果你以1024字節讀取文件,它將永遠不會佔用更多的內存,然後1K.macBufferSize = 4096.當你打開文件流時,它doesn不會被加載到內存中 – Maxim 2012-03-16 23:24:03

+0

如果您顯示上傳的代碼段,將更容易猜測出現問題。 – Maxim 2012-03-16 23:32:50

1

當你有一個像大文件或大圖像/質量好的圖像數據的大尺寸發送給服務器,那麼你可以把它在部分/塊發送。

首先與服務器進行Http連接,然後用DataOutputStream類發送塊。在服務器端,您需要實現接收這些塊的代碼,並在獲取所有塊後將它們放入一個文件中。

+0

這是TCP/IP發明的問題 – Maxim 2012-03-22 14:02:35