2011-04-11 120 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