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

标签 java spring spring-3 content-disposition

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

Action 看起来像:

@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实现这一目标的方法。

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

最佳答案

除了接受的答案之外,Spring 还有类 ContentDisposition专门为此目的。我相信它处理文件名清理。

      ContentDisposition contentDisposition = ContentDisposition.builder("inline")
          .filename("Filename")
          .build();

      HttpHeaders headers = new HttpHeaders();
      headers.setContentDisposition(contentDisposition);

关于java - 使用FileSystemResource强制下载文件时如何设置 'Content-Disposition'和 'Filename'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16601428/

相关文章:

java - SimpleJDBCTemplate 和日期参数在某些情况下会给出奇怪的结果

java - 使用在不同的基于 java 的 Spring 配置文件中定义的原型(prototype) beans

java - 有没有办法禁止将类用作 spring bean?

java - okhttp大文件上传失败

java - 继承中父字段和子字段如何初始化?

java - 您能解释一下计算哈希码的所谓 Java 标准方法吗?

java - 如何让 Spring 打印出哪些 Spring 配置文件处于 Activity 状态?

java - Spring 3 对象与原始数据类型的绑定(bind)列表

spring - 使用 Spring 3 验证的两种方法?

java - 堆栈溢出错误