Servlet 入门—文件下载

今天来介绍下日常用的文件下载功能。

文件准备

在 web 模块下创建文件夹 img, 并准备一张图片。

写代码

1. 编写一个专门下载文件的 servlet

package top.lovezhangli.servlet;

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.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

/**
 * Desc: DownloadServlet
 * Author: xuhe
 * Date: 2021/9/3 5:03 下午
 * Version: 1.0
 */
public class DownloadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.创建字节输入流,关联读取的文件
        // 1.1 获取文件的绝对路径
        String realPath = getServletContext().getRealPath("/img/lyf.jpeg");
        // 1.2 创建字节输出流对象
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));

        //2.设置响应头支持的类型  应用支持的类型为字节流
        /*
            Content-Type 消息头名称   支持的类型
            application/octet-stream   消息头参数  应用类型为字节流
         */
        resp.setHeader("Content-Type","application/octet-stream");

        //3.设置响应头以下载方式打开  以附件形式处理内容
        /*
            Content-Disposition  消息头名称  处理的形式
            attachment;filename=  消息头参数  附件形式进行处理
         */
        resp.setHeader("Content-Disposition","attachment;filename=" + System.currentTimeMillis() + ".png");

        //4.获取字节输出流对象
        ServletOutputStream sos = resp.getOutputStream();

        //5.循环读写文件
        byte[] arr = new byte[1024];
        int len;
        while((len = bis.read(arr)) != -1) {
            sos.write(arr,0,len);
        }

        //6.释放资源
        bis.close();
        sos.close();
    }
}

2. 在 web.xml 中 配置 servlet

将之前 loginServlet 的配置复制一份,改成下面的内容即可。

    <servlet>
        <servlet-name>downloadServlet</servlet-name>
        <servlet-class>top.lovezhangli.servlet.DownloadServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>downloadServlet</servlet-name>
        <url-pattern>/download</url-pattern>
    </servlet-mapping>

3. 启动 tomcat 后验证

 下载后打开文件:

 至此,文件下载的功能就介绍完毕了,主要就是通过 response 对象设置 header 来实现的。


 如果觉得还不错的话,关注、分享、在看(关注不失联~), 原创不易,且看且珍惜~

 

posted on 2021-09-03 17:44  XuHe1  阅读(62)  评论(0编辑  收藏  举报