全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Spring MVC的文件下载实例详解

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小时内与您取得联系。