繁体   English   中英

来自动态源的HTML对象数据URL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM