有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

来自动态源的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) 个答案

  1. # 1 楼答案

    问题在于这一行代码

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

    这并没有像我想象的那样为文件设置正确的mime类型。因此,存在一个不匹配的情况,即Object标记正在查找application/pdf,但服务器正在头中发送不同的MIME类型。一旦我把它们匹配起来,一切都正常了

    我能够使用Spring提供的查找而不是JDK查找来获得正确的MIME类型

    new ConfigurableMimeFileTypeMap().getContentType(directory+filename)