HttpServletResponse对象实现文件下载
来源:互联网 发布:php 判断是否空数组 编辑:程序博客网 时间:2024/05/20 18:46
文件下载在我们的项目中是很常见的需求,实现文件下载功能的方式有很多,spring-mvc框架也提供了文件下载的功能。我们本次探讨的功能是利用HttpServletResponse对象来实现文件下载的功能。
思路如下:
(1)获取文件位置路径
(2)获取文件名
(3)设置content-disposition响应头,控制浏览器以下载的方式打开文件
(4)获取要下载的文件的输入流FileInputStream对象
(5)创建数据缓buffer冲区
(6)通过response对象获取OutputStream输出流对象
(7)将FileInputStream流对象写入到buffer缓冲区
(8)使用OutputStream输出流对象将buffer缓冲区数据输出到客户端浏览器
public class LoadServlet extends HttpServlet{ /** * 载文件,通过OutputStream输出流 */ public void doPost(HttpServletRequest request,HttpServletResponse response){ //1.获取要下载的文件的绝对路径 String realPath = this.getServletContext().getRealPath("/load/ceshi.txt"); //2.获取要下载的文件名 String fileName = realPath.subString(realPath.lastIndexOf("\\")+1); String userAgent = request.getHeader("User-Agent"); //针对IE或者以IE为内核的浏览器: if (userAgent.contains("MSIE")||userAgent.contains("Trident")) { fileName = java.net.URLEncoder.encode(fileName, "UTF-8"); } else { //非IE浏览器的处理: fileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-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 os = response.getOutputStream(); //7.将FileInputStream流对象写入到buffer缓冲区 while((len=in.read(buffer))>0){ os.write(buffer,0,len); } //8.关闭流 in.close(); os.close(); }}
注意:
1、在文件名中含有中文编码时,设置响应头时需要使用URLEncoder.encode(fileName, “UTF-8”)方法进行编码,否则容易出现中文乱码的情况。
2、文件输出流对象应尽量使用OutputStream流对象,避免使用PrintWriter流对象。因为OutputStream是字节流对象,可以处理任意类型的数据;而PrintWriter是字符流输出对象,只能处理字符数据,如果用字符流处理字节数据,就会导致数据丢失。
0 0
- HttpServletResponse对象实现文件下载
- HttpServletResponse对象实现文件下载
- HttpServletResponse对象实现文件下载
- HttpServletResponse对象实现文件下载
- Response对象、HttpServletResponse简介、处理字节编码问题、实现动态文件下载
- Response对象、HttpServletResponse简介、处理字节编码问题、实现动态文件下载
- 使用HttpServletResponse提供文件下载
- (30)HttpServletRequest对象和应答HttpServletResponse对象以及动态文件的下载
- 通过HttpServletResponse对象,实现图片的流方式显示和文件的流方式下载
- 好记性不如烂笔头13-使用HttpServletResponse实现文件下载
- HttpServletResponse对象实现请求重定向(四)
- HttpServletResponse对象
- HttpServletResponse对象
- HttpServletResponse对象
- HttpServletResponse对象
- HttpServletResponse对象
- HttpServletResponse对象
- HttpServletResponse对象
- java中重载与重写的区别
- 一个经过优化的微服务架构案例
- 编译mysql数据库文件的Makefile
- 【unity学习笔记】【新手】unity的两种旋转命令
- 大数据内功修炼到企业实战2.0
- HttpServletResponse对象实现文件下载
- 团队建设
- 张世乐老师(Vincent Zhang) 实战管理教练
- dubbo开发环境配置和部署
- java反射的理解与应用(某大神博客中看到的博文,写的真的太好了,果断转载作为笔记)
- OY问题
- python 贪婪和非贪婪、多行匹配正则表达式小结
- 2017年值得关注的3个JavaScript库
- 怎么用条码打印软件修改日期格式