HttpServletResponse——01下载文件

本文介绍了如何使用HttpServletResponse对象进行文件下载操作。首先,讲述了HttpServletResponse的主要功能,包括向浏览器发送数据和响应头的方法,以及响应状态码的设置。接着详细阐述了下载文件的步骤,如确定文件路径、设置浏览器下载提示、获取输入流、创建缓冲区,并通过OutputStream将文件内容传送到客户端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象(req),代表响应的HttpServletResponse对象(resp)

  • 如果要获取客户端请求发过来的参数:req
  • 如果要给客户端响应一些信息:resp

1.  简单分类

负责向浏览器发送数据的方法

负责向浏览器发送响应头的方法

 

响应的状态码

 

2.  下载文件

1.向浏览器输出消息(...)

2.下载文件

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

        2. 下载的文件名是啥?

        3. 设置想办法让浏览器能够支持下载我们需要的东西

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

        5. 创建缓冲区

        6. 获取OutputStream对象

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

        8. 使用OutputStream将缓冲区中的数据输出到客户端!

 

 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 要获取下载文件的路径
        String realPath = "F:\\WORK2\\javaweb-02-servlet\\servlet-03\\target\\servlet-03\\WEB-INF\\classes\\缩小灯.jpg";
        System.out.println("下载文件的路径" + realPath);
        //2. 下载的文件名是啥?
        String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
        /*注:当成字符串字面值斜杠直接输出时,必须用双斜杠"\\"转义为单斜杠
             Java lastIndexOf() 方法:public int lastIndexOf(int ch): 返回指定字符在此字符串中最后一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
             Java substring() 方法:substring() 方法返回字符串的子字符串;语法 public String substring(int beginIndex) 或 public String substring(int beginIndex, int endIndex);beginIndex -- 起始索引(包括), 索引从 0 开始;beginIndex -- 起始索引(包括), 索引从 0 开始。
        * */
        //3. 设置想办法让浏览器能够支持下载我们需要的东西
        resp.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));
        //注:设置的头信息百度即可——https://www.cnblogs.com/huangui/p/12767965.html;
        //resp.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));
        //注意“attachment;filename=”,不要落下“=”,否则下载的文件名全部为down
        //URLEncoder使用java.net.URLEncoder包
        //4. 获取下载文件的输入流
        FileInputStream in = new FileInputStream(realPath);
        //5. 创建缓冲区
        int len = 0;
        byte[] buffer = new byte[1024];
        //6. 获取OutputStream对象
        ServletOutputStream out = resp.getOutputStream();
        //7. 将FileOutputStream流写入到buffer缓冲区
        //8. 使用OutputStream将缓冲区中的数据输出到客户端!
        while ((len = in.read(buffer))>0){
            out.write(buffer,0,len);
        }

        in.close();
        out.close();

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值