通过HttpServletResponse实现文件的下载

前言

基于的环境:maven
使用的编译器:IDEA

一、文件下载的步骤

大概的流程图:
在这里插入图片描述

具体步骤:

1.我们需要获取到下载文件的路径

 		String realPath = "路径";

2.获取下载文件的文件名

		String fileName =  realPath.substring(realPath.lastIndexOf("\\")+1);

3.我们最好将文件名进行utf-8的编码,防止下载显示的文件名中文乱码

        fileName = URLEncoder.encode(fileName,"utf-8");

4.设置响应头(Content-Disposition),使的浏览器可以支持下载

        resp.setHeader("Content-Disposition", "attachment;filename="+fileName);

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

        FileInputStream in = new FileInputStream(realPath);

6.设置缓冲区

        int len = 0;
        byte[] buffer = new byte[1024];

7.获取response的OutputStream对象

        ServletOutputStream out = resp.getOutputStream();

8.将6中的输入流中的内容写入7中的OutputStream中,响应给浏览器

        while ((len = in.read(buffer))!=-1){
            out.write(buffer,0,len);
        }

9.关闭资源

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

二、代码

package com.stdpei;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

/**
 * @author huxuehao
 * @create 2021-06-10-13:45
 */
public class ServletDown extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        //获取路径
        String realPath = "D:\\Java\\IDEA\\ideaProject\\huStrat\\dome1\\src\\main\\resources\\图片.jpg";
        //获取文件名
        String fileName =  realPath.substring(realPath.lastIndexOf("\\")+1);
        //文件名进行utf8编码
        fileName = URLEncoder.encode(fileName,"utf-8");
        //设置请求头,使得浏览器可以支持我们下载文件(固定写法)
        resp.setHeader("Content-Disposition", "attachment;filename="+fileName);

        //获取文件的输入流
        FileInputStream in = new FileInputStream(realPath);
        //获取resp的输出流
        ServletOutputStream out = resp.getOutputStream();
        //建立缓冲区
        int len = 0;
        byte[] buffer = new byte[1024];
        //完成读写文件
        while ((len = in.read(buffer))!=-1){
            out.write(buffer,0,len);
        }

        //关闭资源
        out.close();
        in.close();

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

三、运行结果

在这里插入图片描述

在这里插入图片描述

四、文件的上传

【点击查看】

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值