编程语言
首页 > 编程语言> > javaweb:Response的应用(二)——文件下载

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