2011-04-11 153 views
1

我使用getObject api從aws s3下載文件。簡單的文本文件工作正常,但在PDF下載我的文件已損壞。我正在使用FileOutputStream並將內容保存在文件中,但保存的PDF已損壞。aws s3 java sdk下載pdf被損壞

我不太確定用於此目的的正確的java api,以及讀取字節的字節數組的大小應該是多少。

我也很好奇,如果使用SDK直接有意義,或者是有開源的包裝API可用Java可用,我可以利用。

FileOutputStream fout = new FileOutputStream(new File(destFileName));

byte[] b = new byte[8192]; 
int bytesRead; 
    while (true) { 
    bytesRead = input.read(b); 
     System.out.println("bytesRead = "+bytesRead); 
     if (bytesRead==-1) 
     break; 
     fout.write(b); 
    }   
    fout.flush(); 
    fout.close(); 

回答

2

老實跟你,我願意打賭的問題是,你寫的整個緩衝區的FileOutputStream。在傳輸結束時,緩衝區將不會被完全覆蓋/覆蓋,並且您最終會將一些字節寫入文件的最後一次讀取結束。您需要修改此代碼以僅寫入從輸入流實際讀取的字節數,而不是整個緩衝區。取而代之的

fout.write(b); 

嘗試

fout.write(b, 0, bytesRead); 

這樣,如果你只有最後一個讀取過程中讀取100個字節,你只寫了前100個字節的緩衝區,而忽略其餘8092實際上已經寫入文件的字節。

+0

這正是問題所在,非常感謝。 – archie 2011-04-11 06:57:55