【问题标题】:aws s3 java sdk download pdf getting corruptedaws s3 java sdk 下载 pdf 损坏
【发布时间】:2011-04-11 01:40:58
【问题描述】:

我正在使用 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();

【问题讨论】:

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


    【解决方案1】:

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

    代替

    fout.write(b);
    

    试试

    fout.write(b, 0, bytesRead);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多