有时候我们会下载服务器文件,需要将文件返回:

/*** 文件下载** @param fileName* @param request* @param response* @throws Exception* @PathVariable注解参考https://www.cnblogs.com/williamjie/p/9139548.html*/@ApiOperation("文件下载")@PostMapping("/download/{fileName}.log")public void download(@PathVariable("fileName") String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception {response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("UTF-8");//fileName为传入的要下载的文件的文件名,本示例下载的是日志文件所以后缀是.logfileName = URLDecoder.decode(fileName, "UTF-8");//要下载的文件的路径File logFile = new File("/usr/local/jar/log/" + fileName + ".log");try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(logFile));BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream())) {long fileLength = logFile.length();response.setContentType("application/x-msdownload;");response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));response.setHeader("Content-Length", String.valueOf(fileLength));byte[] buff = new byte[2048];int bytesRead;while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {bos.write(buff, 0, bytesRead);}} catch (Exception e) {logger.error("错误信息: ", e);}}

如果使用commons上面代码可简化代码如下:
org.apache.commons.io的maven如下:

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version>
</dependency>

简化代码:

    /*** 文件下载** @param fileName* @param request* @param response* @throws Exception* @PathVariable注解参考https://www.cnblogs.com/williamjie/p/9139548.html*/@ApiOperation("文件下载")@PostMapping("/download/{fileName}.log")public void download(@PathVariable("fileName") String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception {//fileName为传入的要下载的文件的文件名,本示例下载的是日志文件所以后缀是.logfileName = URLDecoder.decode(fileName, "UTF-8");//要下载的文件的路径File logFile = new File("/usr/local/jar/log/" + fileName + ".log");InputStream in = new FileInputStream(logFile);String filenamedisplay = URLEncoder.encode(fileName + ".log", "UTF-8");response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("UTF-8");response.setHeader("Content-Disposition", "attachment; filename=" + filenamedisplay);response.setContentType("application/x-download;charset=utf-8");OutputStream out = response.getOutputStream();IOUtils.copy(in, out);out.flush();in.close();}

java下载文件,返回文件流相关推荐

  1. react前端下载后端返回文件流(文件流下载excel、csv)

    以前用vue框架的时候,写过不少下载上传的东西,当然包括后端返回文件流供前端下载,现在用react,牵扯到这个功能,又提起来说,有两种下载类型,一种是Excel,一种是Csv. 首先后端返回这种: 或 ...

  2. Java下载Excel模板文件的实现

    在项目中经常会用到文件下载的功能,比如下载excel模板,这里简单记录一下实现过程 1.将模板文件放到项目资源文件目录中,也可以自定义其他位置,只要通过路径能找到该文件就行: 2.controller ...

  3. java实现Excel导出下载功能(返回pdf流)

    需要引入Jar包 com.spire.xls.Workbook 这种方式只能导出三页(因为收费) Jar包地址 提取码:ut4n public Result<?> teamSourceEx ...

  4. Java 下载多个文件至内存并压缩文件包返回,无需保存至本地打包压缩

    场景 从其他服务器下载文件,将这些文件打包压缩后返回给浏览器.不想将文件下载到本地后在打包压缩,所以使用内存流 方案 /** 入参:urlList -- 多个文件下载地址 ; filename -- ...

  5. Java 安全 后端返回文件流

    1,起由 业务流程:上传文件--服务器保存文件--根据路径访问文件 这种根据路径定位文件,并对文件进行查看的方式对文件安全有很大威胁,一旦知道其他文件的路径,很有可能会造成文件泄露 2,改进 所以,当 ...

  6. js下载后台返回的流文件

    axios.post(url, params,{responseType: 'arraybuffer' //加上responseType: 'arraybuffer',不然下载的PDF是空白页}).t ...

  7. java 下载样板Excel文件

    // 下载本地文件 String fileName = "苹果知识库授权网点整理汇总副本20130210.xls".toString(); // 文件的默认保存名 //File f ...

  8. Java 下载解析Excel文件 报错:jxl.read.biff.BiffException: Unable to recognize OLE stream

    项目开发需要先下载excel文件,然后解析出内容,最后将内容分批次下发给APP端. 在创建Excel的解析实例Workbook时,发现构造函数的入参是InputStream,心中窃喜. public ...

  9. java下载本地excel文件

    @GetMapping("/downloadByPath") public void downloadByPath(String path, HttpServletResponse ...

  10. java 下载远程电脑文件到本地电脑

    可参考:http://www.cnblogs.com/chafe/p/6408516.html http://www.xuebuyuan.com/2181119.html

最新文章

  1. ACMNO.27 Python的两行代码解决 C语言-字符逆序 写一函数。使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。 输入 一行字符 输出 逆序后的字符串
  2. 第十五届全国大学生智能汽车竞赛华南赛区成绩总结
  3. (紀錄)[ASP.NET MVC][jQuery]-1 純手工打造屬於自己的 jQuery GridView
  4. 嵌入式linux内核oops,Linux编程时遇到Oops提示该如何排查?
  5. dotConnect for Oracle入门指南(八):通过OracleCommand类使用存储过
  6. Intel VT学习笔记(九)—— EPT应用示例
  7. window powershell 替换文本的字符
  8. Python面试题(二)
  9. Java消息队列--ActiveMq 初体验
  10. win10改计算机用户名,win10系统修改本地账号用户名的操作方法
  11. 【js】vue 2.5.1 源码学习(二) 策略合并
  12. make it a chorus笔记
  13. Translation 谷歌翻译失效问题
  14. VUE table下载XLSX文件
  15. (一)VirtualBox安装增强功能
  16. 佛青云多少输出才能过鸿蒙,细节需慎重 现阶段佛青云多种路线选择
  17. oracle认证071和061,别只为Oracle Database 18c的发布而兴奋了, 看一看你的Oracle认证考试到期了吗?...
  18. 苹果拼图软件测试,视频照片拼图APP
  19. 【数据库和SQL学习笔记】6.SELECT查询4:嵌套查询、对查询结果进行操作
  20. resultFul请求案例

热门文章

  1. Saber仿真软件许可证过期的解决方法
  2. HTML页面调用md文件显示,javascript – 如何在html文件中包含markdown(.md)文件
  3. python数据库mysql_python数据库-MySQL与python的交互(52)
  4. 一元多项式加法c语言,C语言一元多项式加法.doc
  5. 系统架构设计(3)-可扩展性
  6. Struts2框架学习之二:action详解
  7. C语言——字符串指针篇
  8. SVM 支持向量机简介和sklearn中参数设置详解
  9. python 智能造句,用生成器从给定单词造句
  10. C语言栈的演示(入栈,弹栈,遍历)