Resultful接口实现后端文件下载
简介: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接口实现后端文件下载相关推荐
- 快速的利用 Express 框架实现一个 Rustfull 接口的后端 Server
快速的利用 Express 框架实现一个 Rustfull 接口的后端 Server 附:基于 Nodejs 的服务器后端的框架用的比较多的是 Koa : github/kaojs/koa 但本文这里 ...
- 京东个人实名认证接口personalAuth后端简单demo
京东个人实名认证接口personalAuth后端简单demo 近期项目需要接入京东云二要素实名认证接口,并未找到java后端调用试例,简单记录下 使用maven管理 下面为 maven依赖. < ...
- SpringBoot 系列教程(八十五):Spring Boot使用MD5加盐验签Api接口之前后端分离架构设计
加密算法参考: 浅谈常见的七种加密算法及实现 加密算法参考: 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用 目的: 通过对API接口请求报文签名,后端进行验签处理, ...
- 前端调用后端的接口实现excel文件下载(下载Blod文件)(附带时间格式处理方法)
下载Blod文件(导出处理文件流) // data表示后端返回的文件流 // fileName表示需要导出的文件名 --> 如果没有入参,则文件名默认为当前时间 export function ...
- 前端如何调用后端接口_后端开发:如何写出可靠的接口
毕业进入现在的公司已近一年,完整参与了部门新项目两期的开发上线过程,作为一名后端开发,觉得最痛苦的是上线前和上线后的改 bug 阶段,面对各种突如其来.莫名其妙的bug,头昏脑涨.手忙脚乱.越改越懵, ...
- resultful接口开发
1.什么是 resultful 一种软件架构风格 :如下 GET /student //查找所有学生 GET /student/1 //查找id为1的学生 POST ...
- java 支付类的接口,Java后端支付大杂烩之core.dao,service,web(重点是接口的设计)(二)...
PayMap PayMap是一个使用Java语言集成三方支付的小Demo,现已集成支付宝(国内.国际.移动端.PC端).微信.银联(ACP.UPOP).光大(网关.网页).邮政支付,采用的技术栈为:S ...
- 谷粒学院 Day12.登录页面模式、整合JWT、整合QQ邮箱、用户登录注册接口【后端】、用户登录注册【前端】
项目结构: 配置文件 application.properties配置类 spring.jackson.time-zone=GMT+8# nacos注册中心 spring.cloud.nacos.di ...
- java对接钉钉开放平台接口_后端项目与钉钉接口(第三方)对接要注意的问题...
开发前所需 推荐postman测试,这工具谁用谁知道. 1:需要管理员在钉钉后台给予开发者 开发者权限 2:开发者权限给予后,开发者需要进入:https://open-dev.dingtalk.com ...
最新文章
- 全面分析 Spring 的编程式事务管理及声明式事务管理(转)
- MySQL查询指定字段
- 【Jmeter篇】jmeter+Ant+Jenkins实现自动化测试集成(一)
- 怎的使用jstack诊断Java应用程序故障
- Microsoft Virtual Lab Use Guide
- 【数据结构的魅力】001.认识复杂度二分法异或运算
- 法语:世界上最有辨识度的语言
- JavaScript在发送请求AJAX请求时,URL的域名地址是使用绝对地址还是相对地址?
- 怎样提高团队管理能力7
- Android搜索关键字高亮显示
- fluent瞬态计算终止条件在哪里设置_基于商用软件FLUENT的LES(大涡模拟)计算教学...
- 数据包络分析方法与maxdea软件_奥林巴斯OmniScan X3探伤仪软件升级,缺陷图像无处藏...
- android qq 退出帐号,大家手机上的QQ平常用完退不退出帐号
- vue手写签名,canvas手写签名,canvas签名图片旋转
- OIer常见问题与错误总结
- linux--服务器降频
- 【Python】伪距单点定位
- kubernetes之volumes使用
- 【华为机试题】黑白棋子的最大匹配度
- 如何用 CSS + HTML + JS 创建桌面应用