java中文件下载的思路(参考:孤傲苍狼)
文件下载
文件下载功能是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中文件下载的思路(参考:孤傲苍狼)相关推荐
- 2. Java中的垃圾收集 - GC参考手册
标记-清除(Mark and Sweep)是最经典的垃圾收集算法.将理论用于生产实践时, 会有很多需要优化调整的地点, 以适应具体环境.下面通过一个简单的例子, 让我们一步步记录下来, 看看如何才能保 ...
- jstack处理Java中CPU100%的思路流程
模拟问题代码 构造一个死循环,造成CPU使用率100%. > vim InfiniteLoop.java public class InfiniteLoop {public static voi ...
- Java中文件下载上传常出现的几种问题
目录 下载文件名乱码问题(Java后端) 前端处理编码问题 文件的转换问题 response.setContentType()的String参数及对应类型 下载文件名乱码问题(Java后端) 1.第一 ...
- java中的方法思路理清
方法包括两种: 1构造方法:(1)有参数的构造方法,需要自己定义.(2)无参数的构造方法,系统默认. 2成员方法:(1)实例方法:没有static修饰,必须经过实例化才能进行调用,加void就代表无返 ...
- 孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(三十九)——数据库连接池 一、应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要
孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(三十九)--数据库连接池 一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对 ...
- JAVA中常见异常小结
JAVA中常见异常小结 参考文章: (1)JAVA中常见异常小结 (2)https://www.cnblogs.com/lq147760524/p/6926175.html (3)https://ww ...
- java基础学习总结(二)——开篇(转载于孤傲苍狼博主的心得体会)
由于孤傲苍狼博主16年后,就没有更新博客了.其中有些文章看不了,挺可惜的.为了避免后续文章也会有类似情况,因此,他的博文基本都会转载过来,也会标注转载,做一个备份.不过文章太多,不会每篇文章都有转载于 ...
- java中regex参考
在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu ...
- JAVA中的通用文件下载接口
本文记录下JAVA中的通用文件下载接口,每次都上网找,挺麻烦的. 文章目录 概述 概述 /*** 通用下载请求** @param filePathName 文件路径*/@GetMapping(&quo ...
最新文章
- PyTorch在64位Windows下的Conda包
- 国防科技大学发布最新「3D点云深度学习」综述论文
- sklearn.preprocessing下的数据标准化(scale、MinMaxScaler)
- jQuery的ajax使用场景讨论(c#)
- 详解网页中的关键词分布技术
- Gengine规则引擎
- 使用Spring Boot构建REST Web服务
- [推举]网络工程师必懂的专业术语
- 初识PHP变量函数语法
- Layui--代码修饰器layui.code
- 测试工程师,必须掌握的shell变量知识
- 【Linux】Linux备份与恢复——dump和restore命令
- kali之iwconfig
- 【测试人生】安卓FPS测试详解
- NLP算法工程师,基本技术能力要求有哪些?
- [Err] 1146 [Err] 1682
- CVTE 2022届实习生 Web后台开发笔试
- 蓝海创意云×可米酷 || “360VR全景直播解决方案”亮相企业产品发布会
- java gui 日历_Java实现简单日历小程序 Java图形界面小日历开发
- og聚流行未能链接到服务器,OG 聚流行:建设一个完善的潮流购买平台
热门文章
- 使用ACCESS+OUTLOOK2007邮件方式批量收集数据
- fatal: 无法访问 ‘x.git/‘gnutls_handshake() failed: The TLS connection was non-properly terminated.解决办法
- 在变量前面加个叹号什么意思_a little表示很少,quite a little什么意思?形容数量多少的用法...
- 比亚迪王传福评价小米造车
- gdb学习汇编(三)
- Win10之WSL编译Android7.1源码
- java long类型报错:error: integer number too large
- 别因为要学的太多反而压垮自己
- ios ffmpeg(libfdk-aac) aac encode
- resiprocate之message