[英]HTML Object data URL from dynamic source
因此,我的应用程序的所有上载都不存储在我的Web服务器空间中,而是存储在文件系统存储中。 当我的用户想要访问文件时,他们将调用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控制台或服务器端没有任何错误。 我不确定如何调试此问题。
编辑:所以我才意识到,如果我右键单击空白的Object标签所在的位置,我可以选择“另存为...”,然后下载PDF。 因此,将加载pdf数据,但不会在UI中显示。
问题是这行代码
resp.setContentType(new MimetypesFileTypeMap().getContentType(directory+filename));
这不是我认为的那样为文件设置了正确的mime类型。 因此存在一个不匹配,因为Object标记正在寻找application/pdf
但是服务器在标头中发送了另一个MIME类型。 一旦我将它们匹配起来,一切都会起作用。
我能够使用Spring提供的查找而不是JDK查找来获取正确的MIME类型
new ConfigurableMimeFileTypeMap().getContentType(directory+filename)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.