当前位置: 首页 > 面试题库 >

AWS S3 Java SDK下载PDF损坏

隆向晨
2023-03-14
问题内容

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

我不太确定用于此目的的正确Java API,读取的字节要写入的字节数组的大小应该是多少。

我也很好奇,直接使用SDK是否有意义,或者我可以利用Java中提供的开源包装器api。

FileOutputStream fout =新FileOutputStream(新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();

问题答案:

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

代替

fout.write(b);

尝试

fout.write(b, 0, bytesRead);

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



 类似资料:
  • 我正在实现一个ASP api来完成所有Docusign api流(获取登录信息,获取令牌,发送要签名的信封,下载信封文档)。现在我试图在浏览器中显示一个下载的文档,该文档是空白的。我正在从docusign接收文档字节内容,并试图将其呈现在iframe中。 docusign发送的PDF内容如下 更新 如果文档超过1页,则可以看到所有页面,全部为空白······

  • 我可以通过以下服务下载pdf文件: 但是,当我运行该服务时,我得到了以下响应: %���� 10 obj 要打开pdf,我需要用第二个鼠标按钮点击响应链接: WS网址 然后选择“在新选项卡中打开”以打开pdf文件,看起来您正在运行该服务两次以获得一次pdf文件。 我想自动打开每个请求到WS的pdf文件。 这意味着每次您请求WS时,都应该返回直接在屏幕中打开的pdf文件。 有人能帮我修一下吗? Tk

  • 我试图通过调用Spring RESTendpoint在Reactjs中下载Excel文件,但我遇到了损坏文件的问题。 回应呼叫... Spring控制器…… 服务 当我执行上面的代码,我得到一个Excel文件o. k……但看response.data看起来像…… 嘎嘎��由于数据不可读,无法打开文件。打开服务器上创建的文件是可以的 欢迎任何想法 干杯

  • 我试图使用ITextSharp旋转PDF文档中的各个页面。它看起来很有效,因为当我在土坯上打开时,一切看起来都很好。然而,当试图在itextSharp中重新打开时,会抛出各种异常。我可以看出文档出了问题,因为adobe总是问我是否要保存更改时,打开一个与itextSharp操纵的文档,这表明它修复了损坏。 疯狂的是,我甚至不必对文档进行任何操作,只需创建一个新的压模并关闭它。下面是代码,被剥离到仍

  • 我编写的下载文件的方法总是产生损坏的文件。 我通过adb访问这些文件,将它们传输到我的sccard,在那里我看到它们似乎有合适的大小,但没有根据例如Linux命令的类型。 你知道丢失了什么以及如何修复它吗? 谢谢。 代码的简单版本(但错误相同) 日志:< code > file . length:2485394 | content length:1399242 问题是,我从我的API单例中获得了,

  • 问题内容: 我正在使用角度$ http从服务器下载文件。文件类型可以不同。我应该设置请求标头以进行身份​​验证。下载完成后,文件已损坏!这是我在客户端保存文件的代码: 问题答案: 我最终通过将以下配置添加到ajax请求中解决了该问题: 并将Blob类型更改为 “应用程序/八位字节流”