1. /**
  2. * 传统下载
  3. * @param filename 文件名称
  4. */
  5. @RequestMapping(value="download", method={RequestMethod.GET, RequestMethod.POST})
  6. public void download(HttpServletRequest request, HttpServletResponse response, String filename) {
  7. String realpath = request.getServletContext().getRealPath("/");
  8. // 输出文件路径
  9. String filepath = realpath + filedir + "/" + filename;
  10. response.setContentType("application/octet-stream;charset=utf-8");
  11. response.setHeader("Content-Disposition", "attachment;filename=" + filename);
  12. response.addHeader("Pragma", "no-cache");
  13. response.addHeader("Cache-Control", "no-cache");
  14. try {
  15. OutputStream os = response.getOutputStream();
  16. InputStream is = new BufferedInputStream(new FileInputStream(filepath));
  17. byte[] buffer = new byte[4096];
  18. int length = 0;
  19. while((length = is.read(buffer)) > 0) {
  20. os.write(buffer, 0, length);
  21. }
  22. is.close();
  23. os.close();
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. }
  28.  
  29. /**
  30. * SpringMVC下载
  31. * @return 文件名称
  32. */
  33. @RequestMapping(value="graceDownload", method={RequestMethod.GET, RequestMethod.POST})
  34. public ResponseEntity<byte[]> graceDownload(HttpServletRequest request, String filename) {
  35. String realpath = request.getServletContext().getRealPath("/");
  36. // 输出文件路径
  37. String filepath = realpath + filedir + "/" + filename;
  38. byte[] byteArray = null;
  39. try {
  40. byteArray = FileUtils.readFileToByteArray(new File(filepath));
  41. } catch(Exception e) {
  42. e.printStackTrace();
  43. }
  44. HttpHeaders headers = new HttpHeaders();
  45. headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
  46. headers.setContentDispositionFormData("attachment", filename);
  47. ResponseEntity<byte[]> responseEntity = new ResponseEntity<byte[]>(byteArray, headers, HttpStatus.CREATED);
  48. return responseEntity;
  49. }

Java传统下载和SpringMVC下载的更多相关文章

  1. springMVC下载FTP上的文件

    springMVC下载FTP上的文件 今天没时间写.先上传 一个工具类 工具类 package com.utils; import java.io.File; import java.io.FileO ...

  2. springmvc下载一个文档下载接口里的文档

    A提供了一个文件下载的接口,在调用的时候可以直接在前端用a标签来调用 <a href="http://" target="_blank">下载< ...

  3. JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)

    package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...

  4. 【转】【JAVA应用】多线程断点下载

    [转自] 光仔December http://blog.csdn.net/acmman 问题:多线程下载的好处? 多线程下载比单线程下载快,主要的原因是采用多线程下载,可以抢占更多的服务器资源.抢占C ...

  5. 解决java web中safari浏览器下载后文件中文乱码问题

    解决java web中safari浏览器下载后文件中文乱码问题 String fileName = "测试文件.doc"; String userAgent = request.g ...

  6. CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  7. java实现文件上传下载

    喜欢的朋友可以关注下,粉丝也缺. 今天发现已经有很久没有给大家分享一篇技术文章了,于是想了一下给大家分享一篇java实现文件上传下载功能的文章,不喜欢的希望大家勿喷. 想必大家都知道文件的上传前端页面 ...

  8. Java Web 生成临时文件并下载(原)

    概述:本文是  java 服务器端生成文件并下载的示例,并不完善,下载之后一般来说还需要删除临时文件. 注意:临时文件存放在 /WEB-INF/tmp 目录下,所以先要把  tmp 目录建起来. pu ...

  9. Java开发相关官方存档下载地址

    前言 集中收藏Java开发中需要用到的常用下载地址 jdk Java SE 最新下载 | Oracle 技术网 : http://www.oracle.com/technetwork/cn/java/ ...

随机推荐

  1. 《C++ Primer Plus》第15章 友元、异常和其他 学习笔记

    友元使得能够为类开发更灵活的接口.类可以将其他函数.其他类和其他类的成员函数作为友元.在某些情况下,可能需要前向声明,需要特别注意类和方法声明的顺序,以正确地组合友元.潜逃类是在其他类中生命的类,它有 ...

  2. 《转》python学习(5)--数据类型

    转自 http://www.cnblogs.com/BeginMan/archive/2013/06/08/3125876.html 一.标准类型函数 cmp():比较大小 str():转换为字符串 ...

  3. .Net Core 使用EF Core方法

    新建项目后,使用NuGet安装包: Install-Package Microsoft.EntityFrameworkCore Install-Package Microsoft.EntityFram ...

  4. java基础---->多线程之ThreadLocal(七)

    这里学习一下java多线程中的关于ThreadLocal的用法.人时已尽,人世还长,我在中间,应该休息. ThreadLocal的简单实例 一.ThreadLocal的简单使用 package com ...

  5. 豆瓣api开发

    前面有说过豆瓣API的开发,在做一些开源项目的时候,很多时候会用到豆瓣API接口,拿过来做测试,现在只是对豆瓣API开发做一些简单的梳理: 豆瓣API开发的接口: https://developers ...

  6. 有关velocity的资料(等待整理)

    proxy-target-class="true" 与proxy-target-class="false"的区别: proxy-target-class属性值决 ...

  7. PreparedStatement vs Statement

    Statement和PreparedStatement之间的区别 1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程   2.使用 Statemen ...

  8. [Jenkins] 批量删除构建历史

    Manage Jenkins -> Script Console def jobName = "Some_Job_Name" def maxNumber = 64 Jenki ...

  9. C# tostring 格式化输出

    C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...

  10. JS/Java/Python格式化金额

    //java代码 public static void main(String[] args) {     DecimalFormat myformat = new DecimalFormat(); ...