文件下载

  文件下载功能是web开发中经常使用到的功能,使用HttpServletResponse对象就可以实现文件的下载

文件下载功能的实现思路:

  1.获取要下载的文件的绝对路径

  2.获取要下载的文件名

  3.设置content-disposition响应头控制浏览器以下载的形式打开文件

  4.获取要下载的文件输入流

  5.创建数据缓冲区

  6.通过response对象获取OutputStream流

  7.将FileInputStream流写入到buffer缓冲区

  8.使用OutputStream将缓冲区的数据输出到客户端浏览器

package gacl.response.study;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*** @author gacl* 文件下载*/
public class ResponseDemo02 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {downloadFileByOutputStream(response);//下载文件,通过OutputStream流
    }/*** 下载文件,通过OutputStream流* @param response* @throws FileNotFoundException* @throws IOException*/private void downloadFileByOutputStream(HttpServletResponse response)throws FileNotFoundException, IOException {//1.获取要下载的文件的绝对路径String realPath = this.getServletContext().getRealPath("/download/1.JPG");//2.获取要下载的文件名String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);//3.设置content-disposition响应头控制浏览器以下载的形式打开文件response.setHeader("content-disposition", "attachment;filename="+fileName);//4.获取要下载的文件输入流InputStream in = new FileInputStream(realPath);int len = 0;//5.创建数据缓冲区byte[] buffer = new byte[1024];//6.通过response对象获取OutputStream流OutputStream out = response.getOutputStream();//7.将FileInputStream流写入到buffer缓冲区while ((len = in.read(buffer)) > 0) {//8.使用OutputStream将缓冲区的数据输出到客户端浏览器out.write(buffer,0,len);}in.close();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}

转载于:https://www.cnblogs.com/ZX-LMY/p/6277040.html

java中文件下载的思路(参考:孤傲苍狼)相关推荐

  1. 2. Java中的垃圾收集 - GC参考手册

    标记-清除(Mark and Sweep)是最经典的垃圾收集算法.将理论用于生产实践时, 会有很多需要优化调整的地点, 以适应具体环境.下面通过一个简单的例子, 让我们一步步记录下来, 看看如何才能保 ...

  2. jstack处理Java中CPU100%的思路流程

    模拟问题代码 构造一个死循环,造成CPU使用率100%. > vim InfiniteLoop.java public class InfiniteLoop {public static voi ...

  3. Java中文件下载上传常出现的几种问题

    目录 下载文件名乱码问题(Java后端) 前端处理编码问题 文件的转换问题 response.setContentType()的String参数及对应类型 下载文件名乱码问题(Java后端) 1.第一 ...

  4. java中的方法思路理清

    方法包括两种: 1构造方法:(1)有参数的构造方法,需要自己定义.(2)无参数的构造方法,系统默认. 2成员方法:(1)实例方法:没有static修饰,必须经过实例化才能进行调用,加void就代表无返 ...

  5. 孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(三十九)——数据库连接池 一、应用程序直接获取数据库连接的缺点   用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要

    孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(三十九)--数据库连接池 一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对 ...

  6. JAVA中常见异常小结

    JAVA中常见异常小结 参考文章: (1)JAVA中常见异常小结 (2)https://www.cnblogs.com/lq147760524/p/6926175.html (3)https://ww ...

  7. java基础学习总结(二)——开篇(转载于孤傲苍狼博主的心得体会)

    由于孤傲苍狼博主16年后,就没有更新博客了.其中有些文章看不了,挺可惜的.为了避免后续文章也会有类似情况,因此,他的博文基本都会转载过来,也会标注转载,做一个备份.不过文章太多,不会每篇文章都有转载于 ...

  8. java中regex参考

    在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu ...

  9. JAVA中的通用文件下载接口

    本文记录下JAVA中的通用文件下载接口,每次都上网找,挺麻烦的. 文章目录 概述 概述 /*** 通用下载请求** @param filePathName 文件路径*/@GetMapping(&quo ...

最新文章

  1. PyTorch在64位Windows下的Conda包
  2. 国防科技大学发布最新「3D点云深度学习」综述论文
  3. sklearn.preprocessing下的数据标准化(scale、MinMaxScaler)
  4. jQuery的ajax使用场景讨论(c#)
  5. 详解网页中的关键词分布技术
  6. Gengine规则引擎
  7. 使用Spring Boot构建REST Web服务
  8. [推举]网络工程师必懂的专业术语
  9. 初识PHP变量函数语法
  10. Layui--代码修饰器layui.code
  11. 测试工程师,必须掌握的shell变量知识
  12. 【Linux】Linux备份与恢复——dump和restore命令
  13. kali之iwconfig
  14. 【测试人生】安卓FPS测试详解
  15. NLP算法工程师,基本技术能力要求有哪些?
  16. [Err] 1146 [Err] 1682
  17. CVTE 2022届实习生 Web后台开发笔试
  18. 蓝海创意云×可米酷 || “360VR全景直播解决方案”亮相企业产品发布会
  19. java gui 日历_Java实现简单日历小程序 Java图形界面小日历开发
  20. og聚流行未能链接到服务器,OG 聚流行:建设一个完善的潮流购买平台

热门文章

  1. 使用ACCESS+OUTLOOK2007邮件方式批量收集数据
  2. fatal: 无法访问 ‘x.git/‘gnutls_handshake() failed: The TLS connection was non-properly terminated.解决办法
  3. 在变量前面加个叹号什么意思_a little表示很少,quite a little什么意思?形容数量多少的用法...
  4. 比亚迪王传福评价小米造车
  5. gdb学习汇编(三)
  6. Win10之WSL编译Android7.1源码
  7. java long类型报错:error: integer number too large
  8. 别因为要学的太多反而压垮自己
  9. ios ffmpeg(libfdk-aac) aac encode
  10. resiprocate之message