简介:springboot前后端分离项目,要实现文件下载功能。如果文件较大时采用后端直接下载,将文件采用zip压缩后以流的方式写入响应中,返回给浏览器,浏览器解析完成下载。

一:获取下载请求,调用实现,返回响应。

   @ApiOperation(value = "", notes = "")//@UserLoginToken@GetMapping(value = "/downTaskResult")@ResponseBodypublic RestfulResult downLoadTaskRes(@RequestParam Long id, @RequestParam(required = false) String token,HttpServletResponse response){RestfulResult restfulResult = new RestfulResult();try {Boolean flag=batchTaskService.downLoadTaskRes(id,response);if (flag){return null;}}catch (Exception e){logger.error("批量任务结果下载!",e);restfulResult = new RestfulResult(ResCode.ERROR.getCode(),ResCode.ERROR.getMessage());}return restfulResult;}

二:具体service实现

 @Overridepublic Boolean downLoadTaskRes(Long id, HttpServletResponse response) throws RequestException {string result="";//具体路径,demo暂时写null//判断文件是否存在URL pathUrl=null;Path path=null;try {pathUrl=new URL(result);path=Paths.get(pathUrl.toURI());}catch (Exception e){throw  new RequestException(ResCode.TASK_FILE_ERROR.getCode(),ResCode.TASK_FILE_ERROR.getMessage());}if (!Files.exists(path)){throw  new RequestException(ResCode.TASK_FILE_ERROR.getCode(),ResCode.TASK_FILE_ERROR.getMessage());}String filePath=path.toString();//String filePath="/Users/jiaokc/Desktop/list_diff_data.json";String fileRealName=filePath.substring(filePath.lastIndexOf("/")+1);String fileName=fileRealName.substring(0,fileRealName.lastIndexOf("."));//下载文件压缩返回。response.reset();response.setContentType("application/octet-stream");response.setCharacterEncoding("utf-8");response.setHeader("Content-Disposition", "attachment;filename=" +fileName+".zip");response.setHeader("Access-Control-Expose-Headers","Content-Disposition");response.setHeader("Access-Control-Allow-Origin","*");zipUtil(response,filePath,fileRealName);return  true;}

三:文件边压缩边下载

/*** 压缩文件边压缩边下载* @param response* @param filePath* @param fileName*/private  void zipUtil(HttpServletResponse response,String filePath,String fileName) {//设置压缩流:直接写入response,实现边压缩边下载ZipOutputStream zipos = null;try {zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));zipos.setMethod(ZipOutputStream.DEFLATED); //设置压缩存储方法zipos.setLevel(9);//设置压缩率9} catch (Exception e) {e.printStackTrace();}//将文件写入压缩流DataOutputStream os = null;File file = new File(filePath);try {//添加ZipEntry,并ZipEntry中写入文件流zipos.putNextEntry(new ZipEntry(fileName));os = new DataOutputStream(zipos);BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));byte[] buffer= new byte[1024];int length = 0;while((length = bis.read(buffer))!= -1){os.write(buffer, 0, length);}bis.close();zipos.closeEntry();} catch (IOException e) {e.printStackTrace();}//关闭流try {os.flush();os.close();zipos.close();} catch (IOException e) {e.printStackTrace();}}

Resultful接口实现后端文件下载相关推荐

  1. 快速的利用 Express 框架实现一个 Rustfull 接口的后端 Server

    快速的利用 Express 框架实现一个 Rustfull 接口的后端 Server 附:基于 Nodejs 的服务器后端的框架用的比较多的是 Koa : github/kaojs/koa 但本文这里 ...

  2. 京东个人实名认证接口personalAuth后端简单demo

    京东个人实名认证接口personalAuth后端简单demo 近期项目需要接入京东云二要素实名认证接口,并未找到java后端调用试例,简单记录下 使用maven管理 下面为 maven依赖. < ...

  3. SpringBoot 系列教程(八十五):Spring Boot使用MD5加盐验签Api接口之前后端分离架构设计

    加密算法参考: 浅谈常见的七种加密算法及实现 加密算法参考: 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用 目的: 通过对API接口请求报文签名,后端进行验签处理, ...

  4. 前端调用后端的接口实现excel文件下载(下载Blod文件)(附带时间格式处理方法)

    下载Blod文件(导出处理文件流) // data表示后端返回的文件流 // fileName表示需要导出的文件名 --> 如果没有入参,则文件名默认为当前时间 export function ...

  5. 前端如何调用后端接口_后端开发:如何写出可靠的接口

    毕业进入现在的公司已近一年,完整参与了部门新项目两期的开发上线过程,作为一名后端开发,觉得最痛苦的是上线前和上线后的改 bug 阶段,面对各种突如其来.莫名其妙的bug,头昏脑涨.手忙脚乱.越改越懵, ...

  6. resultful接口开发

    1.什么是 resultful 一种软件架构风格 :如下 GET       /student     //查找所有学生 GET       /student/1  //查找id为1的学生 POST ...

  7. java 支付类的接口,Java后端支付大杂烩之core.dao,service,web(重点是接口的设计)(二)...

    PayMap PayMap是一个使用Java语言集成三方支付的小Demo,现已集成支付宝(国内.国际.移动端.PC端).微信.银联(ACP.UPOP).光大(网关.网页).邮政支付,采用的技术栈为:S ...

  8. 谷粒学院 Day12.登录页面模式、整合JWT、整合QQ邮箱、用户登录注册接口【后端】、用户登录注册【前端】

    项目结构: 配置文件 application.properties配置类 spring.jackson.time-zone=GMT+8# nacos注册中心 spring.cloud.nacos.di ...

  9. java对接钉钉开放平台接口_后端项目与钉钉接口(第三方)对接要注意的问题...

    开发前所需 推荐postman测试,这工具谁用谁知道. 1:需要管理员在钉钉后台给予开发者 开发者权限 2:开发者权限给予后,开发者需要进入:https://open-dev.dingtalk.com ...

最新文章

  1. 全面分析 Spring 的编程式事务管理及声明式事务管理(转)
  2. MySQL查询指定字段
  3. 【Jmeter篇】jmeter+Ant+Jenkins实现自动化测试集成(一)
  4. 怎的使用jstack诊断Java应用程序故障
  5. Microsoft Virtual Lab Use Guide
  6. 【数据结构的魅力】001.认识复杂度二分法异或运算
  7. 法语:世界上最有辨识度的语言
  8. JavaScript在发送请求AJAX请求时,URL的域名地址是使用绝对地址还是相对地址?
  9. 怎样提高团队管理能力7
  10. Android搜索关键字高亮显示
  11. fluent瞬态计算终止条件在哪里设置_基于商用软件FLUENT的LES(大涡模拟)计算教学...
  12. 数据包络分析方法与maxdea软件_奥林巴斯OmniScan X3探伤仪软件升级,缺陷图像无处藏...
  13. android qq 退出帐号,大家手机上的QQ平常用完退不退出帐号
  14. vue手写签名,canvas手写签名,canvas签名图片旋转
  15. OIer常见问题与错误总结
  16. linux--服务器降频
  17. 【Python】伪距单点定位
  18. kubernetes之volumes使用
  19. 【华为机试题】黑白棋子的最大匹配度
  20. 如何用 CSS + HTML + JS 创建桌面应用

热门文章

  1. 每日一录20220816—01
  2. 【Unity】Obi插件系列(七)—— Obi Emitters
  3. 推荐几部好看的漫画,漫迷们不容错过的动漫新番哦
  4. iOS微信支付--解析失败
  5. Linux -- 如何修改 Linux 虚拟机 SNMP 的团体名
  6. 【C语言进阶】⑤关于数组传参和指针传参辨析
  7. Unity显示FPS帧数
  8. 爱上一个自己讨厌的人
  9. iris莺尾花matplotlib实验柱状图饼图直方图
  10. 性格特点有哪些_各地区域文化不同,各省人的性格特点也千差万别之内蒙、四川...