2015-10-19 71 views
0

因此,我的应用程序的所有上传内容都不存储在我的Web服务器空间中,它们存储在文件系统存储中。当我的用户想要访问文件时,他们会调用一个URL,后端进程会通过HttpServletResponse outputstream将数据缓冲到浏览器。这可以很好地用于下载文件。现在我的用例有一个场景,我需要使用相同的方法加载嵌入的对象。来自动态来源的HTML对象数据网址

我基本上是在浏览器中加载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数据加载,但它只是不显示在用户界面。

回答

0

的问题是这行代码

resp.setContentType(new MimetypesFileTypeMap().getContentType(directory+filename)); 

,因为我认为这是这是没有设置正确的MIME类型的文件。因此,Object标记正在寻找application/pdf,但服务器在标头中发送了不同的MIME类型。一旦我匹配他们的一切工作。

我可以使用Spring提供的查询,以获得正确的MIME类型,而不是JDK查找

new ConfigurableMimeFileTypeMap().getContentType(directory+filename)