Java 从Servlets下载文件-Chrome警告+;下载后如何重定向用户?
我有一个带有downlod文件链接的简单表 一切似乎都很好,当我单击下载时,文件在硬盘上找到并提供给用户 我的问题是,当我检查chrome时,我看到:Java 从Servlets下载文件-Chrome警告+;下载后如何重定向用户?,java,jakarta-ee,servlets,Java,Jakarta Ee,Servlets,我有一个带有downlod文件链接的简单表 一切似乎都很好,当我单击下载时,文件在硬盘上找到并提供给用户 我的问题是,当我检查chrome时,我看到: Resource interpreted as Document but transferred with MIME type application/octet-stream: "http://localhost:8080/fus-app/myUploadedFiles". 为什么会这样说 我拥有的相关代码是: httpServlet
Resource interpreted as Document but transferred with MIME type application/octet-stream: "http://localhost:8080/fus-app/myUploadedFiles".
为什么会这样说
我拥有的相关代码是:
httpServletResponse.setContentType("application/octet-stream");
httpServletResponse.setHeader("Content-Disposition", "attachment; filename=\"" + fileNameOnSystem + "\"");
还有一个额外的问题:
下载文件后,用户仍然可以看到带有表的页面,但我想重定向到其他页面。我该怎么做
response.sendRiderect()
似乎不起作用
编辑:这是我向用户提供下载链接的方式:
<form method="post" action="<%= request.getServletContext().getContextPath() +"/myUploadedFiles" %>">
<input type="hidden" name="fileNameOnSystem" value="<%= rset.getString("fileNameOnSystem") %>" />
<button type="submit" class="btn btn-default" />Download File </button>
</form>
下载文件
尝试在下载链接中指定HTML5下载属性:
<a href='http://example.com/archive.zip' download>Export</a>
至于重定向,这里不是好消息
HttpServletResponse的“已提交”状态实际上是一种
说明是否已将响应头写入
底层套接字。“承诺”的回应(至少)是第一个
行写的。因为响应的第一行包含状态
代码,因此您不能更改已提交文件的状态代码
回应。。。这意味着将状态更改为3xx为时已晚
进行重定向。类似地,您不能执行本地转发,因为
您已经开始发送响应
因此,在发送文件(这是一个已提交的响应)后,您将无法对响应执行更多操作。但是,您可以先将它们转发到另一个页面,然后让该页面显示一条消息,并最终触发下载
找到以下示例:
<html>
<head>
<meta http-equiv="refresh" content="5;url=http://server.com/file.zip">
</head>
<body>
Thank you for downloading file.zip!
</body>
</html>
感谢您下载file.zip!
谢谢你的回答,我已经编辑了我的问题。实际上,文件在驱动器中的某个位置,因此我必须从servlet提供文件,我无法直接链接到该文件。系统上的文件名类似于:test1234.pdf,并且我知道它位于哪个目录(如C:\appuser\test1234.pdf),因此我可以提供该文件。因此,我只能向servlet提供某种参数,然后我给出文件。您应该能够提供servlet处理的URL。客户机不知道它是否是一个实际的文件,或者您只是在生成随机位。因此,如果您的servlet处理woogie.com/somefile,您仍然可以将:
放在您的网页上。