aws s3 java sdk下载pdf越来越糟糕了

时间:2011-04-11 01:40:59

标签: java pdf file-io amazon-s3 fileoutputstream

我使用getObject api从aws s3下载文件。简单的文本文件工作正常,但在pdf下载我的文件已损坏。我正在使用FileOutputStream并将内容保存在文件中,但保存的pdf已损坏。

我不太确定用于此目的的正确java api以及读取字节的字节数组的大小应该是多少。

我很好奇,如果直接使用SDK是有意义的,或者是否有可用的Java开源包装器api。

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

1 个答案:

答案 0 :(得分:2)

老实说,我愿意打赌问题是你把整个缓冲区写到FileOutputStream。在传输结束时,缓冲区将不会被完全填满/覆盖,您最终会将一些字节写入文件末尾,这些字节是上次读取时遗留的。您需要修改此代码以仅写入从输入流实际读取的字节数,而不是整个缓冲区。

而不是

fout.write(b);

尝试

fout.write(b, 0, bytesRead);

这样,如果在上次读取期间只读取100个字节,则只写入缓冲区的前100个字节,并忽略实际已写入文件的剩余8092个字节。