2017年11月29日 10:32:20

阅读数:3907

SpringBoot的文件下载方法有很多,此处只记录使用Spring的Resource实现类FileSystemResource做下载,其余实现类照葫芦画瓢即可。 
直接上干货

1、下载部分代码

    public ResponseEntity<FileSystemResource> export(File file) {
if (file == null) {
return null;
}
HttpHeaders headers = new HttpHeaders();
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
headers.add("Content-Disposition", "attachment; filename=" + System.currentTimeMillis() + ".xls");
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
return ResponseEntity
.ok()
.headers(headers)
.contentLength(file.length())
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(new FileSystemResource(file));
}

这段代码,我是封装在BaseController.class,其他的Controller继承该类,就可直接调用父类的下载方法,service只需要提供文件file即可。

2、实例展示

@RestController
@RequestMapping(value = "/order", method = RequestMethod.POST)
public class OrderController extends BaseController { @Autowired
private IOrderService orderService; @RequestMapping(value = "/export")
public ResponseEntity<FileSystemResource> listExport(String proNo) {
File file = orderService.listExport(proNo);
return export(file);
}
}

注意:此处使用的下载返回是FileSystemResource,所以service提供的是File。
以下是百度到的Resource其它实现类,引用来自http://elim.iteye.com/blog/2016305

ClassPathResource 可用来获取类路径下的资源文件。假设我们有一个资源文件test.txt在类路径下,我们就可以通过给定对应资源文件在类路径下的路径path来获取它,new ClassPathResource(“test.txt”)。 
FileSystemResource可用来获取文件系统里面的资源。我们可以通过对应资源文件的文件路径来构建一个FileSystemResource。FileSystemResource还可以往对应的资源文件里面写内容,当然前提是当前资源文件是可写的,这可以通过其isWritable()方法来判断。FileSystemResource对外开放了对应资源文件的输出流,可以通过getOutputStream()方法获取到。 
UrlResource可用来代表URL对应的资源,它对URL做了一个简单的封装。通过给定一个URL地址,我们就能构建一个UrlResource。 
ByteArrayResource是针对于字节数组封装的资源,它的构建需要一个字节数组。 
ServletContextResource是针对于ServletContext封装的资源,用于访问ServletContext环境下的资源。ServletContextResource持有一个ServletContext的引用,其底层是通过ServletContext的getResource()方法和getResourceAsStream()方法来获取资源的。 
InputStreamResource是针对于输入流封装的资源,它的构建需要一个输入流。

最新文章

  1. SQL Server安全(3/11):主体和安全对象(Principals and Securables)
  2. Effective C++ -----条款44:将与参数无关的代码抽离templates
  3. sdutoj 2151 Phone Number
  4. Linux-记录一次被当肉鸡行为
  5. verify.js使用验证插件使用
  6. 【HDU 1009】FatMouse&#39; Trade
  7. cms 二级域名修改信息
  8. java 实例之杨辉三角
  9. Careercup - Facebook面试题 - 4909367207919616
  10. Jquery实现鼠标hover图片遮罩弹出提示层特效
  11. 【ActiveMQ】持久化消息队列的三种方式
  12. jQuery获取动态生成的元素
  13. Javascript:由 “鸭子类型” 得出来的推论
  14. 使用bootstrap网格系统自适应盒子宽度时保持所有盒子高度一致。
  15. MySQL索引选择及规则整理
  16. Asynchronous vs synchronous client applications(MQTT)
  17. 实现点击页面其他地方,隐藏div(原生和VUE)
  18. SpringBoot2.0 最简单的 idea 快速创建项目
  19. mybtis 基础
  20. centos 安装docker-compose

热门文章

  1. word中公式居中编号在最右端
  2. Python无限元素列表实例教程
  3. 事件,委托,action与func文章不错的
  4. Django使用manage.py备份与恢复数据
  5. CodeForces 493B Vasya and Wrestling 【模拟】
  6. git add 不必要的文件 如何撤回
  7. rpm 安装zabbix 注意
  8. 为什么我们做分布式要使用Redis
  9. linux netstat 统计连接数查看
  10. mysql 配置路径