java 文件下载详解_SpringMvc 文件下载 详解

最近SSM 需要用到文件下载,以前没用过,在百度上找了好久发现没有一篇博客,对于此段代码进行详细讲解,

  这里是本人的个人总结,跟大家分享一下!!!不谢

/**

* 文件下载

* ResponseEntity:该类实现响应头、文件数据(以字节存储)、状态封装在一起交给浏览器处理以实现浏览器的文件下载

*

* ResponseEntity 也可作为响应数据使用 与@ResponseBody 注解功能相似

* 但是ResponseEntity的优先级高于@ResponseBody

* 在不是ResponseEntity的情况下才去检查有没有@ResponseBody注解。

* 如果响应类型是ResponseEntity可以不写@ResponseBody注解,写了也没有关系。

*

* 简单粗暴的讲,个人理解:

* @ResponseBody可以直接返回Json结果,

* @ResponseEntity不仅可以返回json结果,还可以定义返回的HttpHeaders和HttpStatus

*/

@RequestMapping("/download")

public ResponseEntity download(HttpServletRequest request, @RequestParam String filename) throws IOException {

//文件所在位置

String downloadFilePath = request.getSession().getServletContext().getRealPath("/uploud");

//获取要下载的文件

File file = new File(downloadFilePath, filename);

//http头信息 设置一些约束之类的东西

HttpHeaders headers = new HttpHeaders();

//设置编码 为了解决中文名称乱码问题

String downloadFileName = new String(filename.getBytes("UTF-8"), "iso-8859-1");

//将编码加到http头信息中

headers.setContentDispositionFormData("attachment", downloadFileName);

/**

* MediaType:互联网媒介类型

* contentType:具体请求中的媒体类型信息

* MediaType: 很多常量 多种类型可设置

* APPLICATION_OCTET_STREAM:二进制流数据(如常见的文件下载)

*

* 还有一种常见的:

* MULTIPART_FORM_DATA: 需要在表单中进行文件上传时,就需要使用该格式

*/

headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

/**

* FileUtils.readFileToByteArray:读取文件到字节数组

*

* CREATED:201状态码:创建

*

* 简而言之,个人理解:

* 创建/下载 一个根据http头信息约束的 字节数组(文件)

*/

return new ResponseEntity(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值