【发布时间】:2015-10-19 20:54:40
【问题描述】:
所以我的应用程序的所有上传都没有存储在我的网络服务器空间中,它们存储在文件系统存储中。当我的用户想要访问他们调用 URL 的文件时,后端进程将通过 HttpServletResponse 输出流将数据缓冲到浏览器。这适用于下载文件。现在我的用例有一个场景,我需要使用相同的方法加载一个嵌入式对象。
我实际上是在浏览器中加载 PDF 文件的预览。如果 PDF 存储在 Web 服务器上并且我提供了文件的直接 URL,则此方法可以正常工作。但是当我使用我向用户发送文件的方法时,它就不起作用了。
<object data='"+pdfUrl+"' type='application/pdf' width='160px' height='160px' />
如果我将pdfURL 放入浏览器,我的文件下载没有问题。所以我认为问题是我在输出流中发送的 HTTP 标头可能会阻止对象正确加载。我不确定它是否期望设置特定的东西来触发加载文件
我目前使用的非常基本的标题如下:
BufferedInputStream is = <Some File Inputstream>;
resp.setContentType(new MimetypesFileTypeMap().getContentType(directory+filename));
resp.setHeader("Content-Disposition", "attachment; filename="+StringFormatHelper.formatFileName(filename));
bufferedCopy(is, resp.getOutputStream());
is.close();
resp.getOutputStream().flush();
任何人对我必须更改哪些内容以使数据正确加载到 Object 标记有任何想法吗?我在 JS 控制台或服务器端没有收到任何错误。我不确定如何调试此问题。
编辑: 所以我刚刚意识到,如果我右键单击空白对象标签所在的位置,我可以选择“另存为...”,当我这样做时,我会下载 PDF。所以加载了 pdf 数据,但它只是没有显示在 UI 中。
【问题讨论】:
标签: javascript java html http-headers