javaweb:Response的应用(二)——文件下载
作者:互联网
为什么直接就是Response的应用二呢?因为Response的应用一就是向浏览器输出消息,即
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter writer = resp.getWriter(); writer.println("Hello Servlet");
}
诸如此类。
那么我们长话短说,直接进入正题。
利用Response实现文件的下载大致有七个步骤,分别为:
1.获取文件的路径,获取文件的路径方法有很多种,下面只列举出了一种;
2.获取文件的名称;
3.设置浏览器的相关信息,最重要的就是要让浏览器支持下载;
4.获取文件的输入流;
5.创建缓冲区;
6.获取ServletOutputStream输出流;
7.利用输入流将文件写入缓冲区,再利用输出流发送给客户端。
话不多说直接上源码
1 package com.jms.servlet; 2 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.net.URLEncoder; 6 7 import javax.servlet.ServletException; 8 import javax.servlet.ServletOutputStream; 9 import javax.servlet.http.HttpServlet; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 13 public class filedown extends HttpServlet{ 14 15 @Override 16 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 17 //1.获取文件路径 18 String filepath = this.getServletContext().getRealPath("/WEB-INF/classes/jms.png"); 19 //2.获取文件的名称 20 //原理就是截取最后一个"/"后面的部分,“\\”是进行了转义 21 String filename = filepath.substring(filepath.lastIndexOf("\\") + 1); 22 filename = URLEncoder.encode(filename, "UTF-8");//对文件名进行编码,否则中文名可能出现乱码问题 23 System.out.print(filename); 24 //3.设置浏览器支持下载 25 resp.setHeader("Content-Disposition","attachment;filename="+filename); 26 //4.获取文件的输入流 27 FileInputStream fis =new FileInputStream(filepath); 28 //5.创建缓冲区 29 int len = 0; 30 byte buffer[] = new byte[1024]; 31 //6.获取ServletOutputStream 32 ServletOutputStream sos = resp.getOutputStream(); 33 //7.将输入流写入到缓冲区,再利用ServletOutputStream将数据发送给客户端 34 while((len=fis.read(buffer))!=-1){ 35 sos.write(buffer, 0, len); 36 } 37 //不要忘记关闭流 38 fis.close(); 39 sos.close(); 40 } 41 42 @Override 43 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 44 // TODO Auto-generated method stub 45 doGet(req, resp); 46 } 47 48 49 }
修改web.xml文件
<servlet> <servlet-name>down</servlet-name> <servlet-class>com.jms.servlet.filedown</servlet-class> </servlet> <servlet-mapping> <servlet-name>down</servlet-name> <url-pattern>/down</url-pattern> </servlet-mapping>
测试
没有问题,文件成功下载。
(本文仅作个人学习记录用,如有纰漏,敬请指正)
标签:文件,javaweb,resp,filename,获取,import,servlet,Response,下载 来源: https://www.cnblogs.com/jmsstudy/p/16515488.html