当前位置: 首页 > 面试题库 >

使用FileSystemResource强制文件下载文件时,如何设置“ Content-Disposition”和“ Filename”?

丁茂
2023-03-14
问题内容

设置Content-Disposition=attachmentfilename=xyz.zip使用Spring 3
的最合适,最标准的方法FileSystemResource什么?

动作看起来像:

@ResponseBody
@RequestMapping(value = "/action/{abcd}/{efgh}", method = RequestMethod.GET, produces = "application/zip")
@PreAuthorize("@authorizationService.authorizeMethod()")
public FileSystemResource doAction(@PathVariable String abcd, @PathVariable String efgh) {

    File zipFile = service.getFile(abcd, efgh);

    return new FileSystemResource(zipFile);
}

尽管该文件是zip文件,所以浏览器始终会下载该文件,但是我想明确提及该文件作为附件,并且还提供与该文件的实际名称无关的文件名。

可能有解决此问题的方法,但是我想知道适当的Spring和FileSystemResource实现此目标的方法。

PS这里使用的文件是一个临时文件,当JVM存在时,标记为删除。


问题答案:
@RequestMapping(value = "/action/{abcd}/{efgh}", method = RequestMethod.GET)
@PreAuthorize("@authorizationService.authorizeMethod(#id)")
public HttpEntity<byte[]> doAction(@PathVariable ObjectType obj, @PathVariable Date date, HttpServletResponse response) throws IOException {
    ZipFileType zipFile = service.getFile(obj1.getId(), date);

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    response.setHeader("Content-Disposition", "attachment; filename=" + zipFile.getFileName());

    return new HttpEntity<byte[]>(zipFile.getByteArray(), headers);
}


 类似资料:
  • 问题内容: 我有图像列表,我希望每个图像都有一个“下载”链接,以便用户可以下载图像。 所以有人可以指导我如何为php中的任何文件提供下载链接吗? 编辑 我希望在单击下载链接时显示一个下载面板,但我不想导航到要在浏览器中显示的图像 问题答案: 如果要强制下载,可以使用如下所示的内容: 如果仅使用常规链接链接到此脚本,则将下载文件。 顺便说一句,上面的代码段需要在页面的开头执行(在没有任何标题或HTM

  • 我下载了一个文件作为ajax的响应。如何从中获取文件名和文件类型并显示缩略图。我得到了很多搜索结果,但找不到正确的方法。 控制台输出:

  • 问题内容: 我希望在我的一个站点的每个视频下方添加“下载此文件”功能。我需要强迫用户下载文件,而不仅仅是链接到文件,因为有时这会开始在浏览器中播放文件。问题是,视频文件存储在单独的服务器上。 有什么办法可以强制用PHP下载吗? 问题答案: 您可以尝试这样的事情: 我刚刚测试了它,它对我有用。 请注意,为了能够读取远程URL,您需要启用它。

  • 问题内容: 我的服务器上有一个CSV文件。如果用户单击链接,则应下载该链接,但会在我的浏览器窗口中打开。 我的代码如下 这是我所有开发工作都在上面的普通Web服务器。 我尝试了类似的东西: 现在我文件的内容: 现在我的问题是正在下载,而不是我的CSV文件。它创建一个新文件。 问题答案: .htaccess解决方案 要强行下载服务器上的所有CSV文件,请添加.htaccess文件: PHP解决方案

  • 问题内容: 当用户单击下载链接时,我正在尝试下载文件。 在控制器中: 这将打开对话框以保存文件,但它表示文件为0字节。并将其更改为: 我得到了一堆奇怪的字符,而不是文件下载对话框。 最后,将“ setContent”行切换为: 它返回一个PHP错误: 致命错误:允许的内存大小… 关于如何实现这一目标的任何线索?我以前在PHP(没有MVC)中做过,但是我不知道通过Symfony2可以做些什么… 也许

  • 问题内容: 我希望用户能够下载服务器上的某些文件,但是当我尝试使用Internet上的许多此类示例中的任何一个时,对我来说似乎没有任何作用。我试过这样的代码: 我什至尝试使用我能找到的最基本的示例,如下所示: 测试完此功能后,我删除了所有其他代码,并使用仅包含此代码的空文件来删除由外部源创建的任何错误。 当我在控制台中查看文件时,将使用正确的标题发送文件,即 但是不会显示保存对话框。 我还尝试使用