来自动态源的javascript HTML对象数据URL
因此,我的应用程序的所有上传都不会存储在我的web服务器空间中,而是存储在一个文件系统存储器中。当我的用户想要访问文件时,他们会调用一个URL,后端进程会通过HttpServletResponse outputstream将数据缓冲到浏览器中。这非常适合下载文件。现在,我的用例有一个场景,我需要使用相同的方法加载一个嵌入式对象
我基本上是在浏览器中加载PDF文件的预览。如果PDF存储在web服务器上,并且我提供了指向该文件的直接URL,那么这就可以了。但当我使用我的方法向用户发送文件时,它就不起作用了
<object data='"+pdfUrl+"' type='application/pdf' width='160px' height='160px' />
如果我把pdfURL
放进浏览器,我的文件就可以下载了。因此,我认为问题在于我在outputstream中发送的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();
有人知道我需要修改什么才能将数据正确加载到对象标记中吗?我在JS控制台或服务器端没有收到任何错误。我不知道如何调试这个问题
编辑: 所以我才意识到,如果我右键单击空白对象标签的位置,我可以选择“保存为…”当我下载PDF时。因此,pdf数据被加载,但它只是不显示在UI中
# 1 楼答案
问题在于这一行代码
这并没有像我想象的那样为文件设置正确的mime类型。因此,存在一个不匹配的情况,即Object标记正在查找
application/pdf
,但服务器正在头中发送不同的MIME类型。一旦我把它们匹配起来,一切都正常了我能够使用Spring提供的查找而不是JDK查找来获得正确的MIME类型