1

我有一个带有下载文件链接的简单表格..

一切似乎都运行良好,当我单击下载时,文件会在硬盘驱动器上找到并提供给用户。

我的问题是,当我检查 chrome 时,我看到:

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>
4

1 回答 1

2

尝试在下载链接中指定 HTML5 下载属性:

<a href='http://example.com/archive.zip' download>Export</a>

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download

至于重定向,这里不是好消息提交响应后是否可以从 servlet 过滤器转发或重定向?...

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> 
于 2013-10-25T18:25:37.560 回答