Spring MVC的文件下载实例详解

读取文件
要下载文件,首先是将文件内容读取进来,使用字节数组存储起来,这里使用spring里面的工具类实现
import org.springframework.util.FileCopyUtils;
public byte[] downloadFile(String fileName) {
byte[] res = new byte[0];
try {
File file = new File(BACKUP_FILE_PATH, fileName);
if (file.exists() && !file.isDirectory()) {
res = FileCopyUtils.copyToByteArray(file);
}
} catch (IOException e) {
logger.error(e.getMessage());
}
return res;
}
这个数组就是文件的内容,后面将输出到响应,供浏览器下载
下载文件的响应
下载文件的响应头和一般的响应头是有所区别的,而这里面还要根据用户浏览器的不同区别对待
我把生成响应的代码封装成了一个方法,这样所有下载响应都可以调用这个方法了,避免重复代码到处写
protected ResponseEntity<byte[]> downloadResponse(byte[] body, String fileName) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getRequest();
String header = request.getHeader("User-Agent").toUpperCase();
HttpStatus status = HttpStatus.CREATED;
try {
if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {
fileName = URLEncoder.encode(fileName, "UTF-8");
fileName = fileName.replace("+", "%20"); // IE下载文件名空格变+号问题
status = HttpStatus.OK;
} else {
fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
}
} catch (UnsupportedEncodingException e) {}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", fileName);
headers.setContentLength(body.length);
return new ResponseEntity<byte[]>(body, headers, status);
}
这里需要注意,一般来说下载文件是使用201状态码的,但是IE浏览器不支持,还得我花了很大力气才找出来是那个问题
其中对文件名的处理是为了防止中文以及空格导致文件名乱码
控制器方法
在控制器的那里需要对返回值进行处理
@RequestMapping(value = "/download-backup", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<byte[]> downloadBackupFile(@RequestParam String fileName) {
byte[] body = backupService.downloadFile(fileName);
return downloadResponse(body, fileName);
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Spring
# MVC的文件下载
# MVC实现文件下载
# SpringMVC实现文件下载功能
# 成了
# 我把
# 希望能
# 花了
# 还得
# 不支持
# 而这
# 谢谢大家
# 中对
# 需要注意
# 返回值
# 是为了
# IOException
# catch
# logger
# error
# exists
# BACKUP_FILE_PATH
# amp
# copyToByteArray
相关文章:
如何快速生成橙子建站落地页链接?
香港服务器租用费用高吗?如何避免常见误区?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
如何快速选择适合个人网站的云服务器配置?
SQL查询语句优化的实用方法总结
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何通过二级域名建站提升品牌影响力?
建站之星后台密码遗忘或太弱?如何重置与强化?
如何通过免费商城建站系统源码自定义网站主题与功能?
如何在服务器上配置二级域名建站?
如何用wdcp快速搭建高效网站?
深圳网站制作平台,深圳市做网站好的公司有哪些?
建站三合一如何选?哪家性价比更高?
建站主机SSH密钥生成步骤及常见问题解答?
定制建站流程解析:需求评估与SEO优化功能开发指南
建站之星各版本价格是多少?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
如何快速查询域名建站关键信息?
网站制作企业,网站的banner和导航栏是指什么?
官网网站制作腾讯审核要多久,联想路由器newifi官网
视频网站app制作软件,有什么好的视频聊天网站或者软件?
如何选择高效可靠的多用户建站源码资源?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
如何获取PHP WAP自助建站系统源码?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
教学网站制作软件,学习*后期制作的网站有哪些?
深圳网站制作案例,网页的相关名词有哪些?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
制作网站怎么制作,*游戏网站怎么搭建?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何用低价快速搭建高质量网站?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
网站专业制作公司有哪些,做一个公司网站要多少钱?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
如何快速打造个性化非模板自助建站?
Python lxml的etree和ElementTree有什么区别
长沙做网站要多少钱,长沙国安网络怎么样?
常州企业建站如何选择最佳模板?
如何选择高效便捷的WAP商城建站系统?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
安徽网站建设与外贸建站服务专业定制方案
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
视频网站制作教程,怎么样制作优酷网的小视频?
*请认真填写需求信息,我们会在24小时内与您取得联系。