文件下载

一看到文件就会想到用io流来实现,那怎么在Servlet中实现文件下载呢?

在这里插入图片描述
首先找到图片所在位置

然后写个前端页面,我搞个下载按钮效果比较直观
在这里插入图片描述
注意 :web.xml中记得要添加个servlet-mapping
在这里插入图片描述
创建了一个Servlet类叫:ImageServlet
代码如下:

package com.sc.controller;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
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.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;

@WebServlet(name="download",urlPatterns = "/download.ii")
public class ImageServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            //获取到资源的路径
            String path = this.getServletContext().getRealPath("/images/55.jpg");
            //读取资源
            InputStream inputStream = new FileInputStream(path);
            //获取到文件名,路径在电脑上保存是\\形式的。
            String fileName = path.substring(path.lastIndexOf("\\") + 1);
            //将文件名转码为中文,防止中文为乱码
            fileName = URLEncoder.encode(fileName,"UTF-8");
            //设置消息头,告诉浏览器,我要下载这个图片
            response.setHeader("Content-Disposition", "attachment; filename="+fileName);
//            response.setHeader("content-type","image/jpg");
            //把读取到的资源写给浏览器
            int len = 0;
            byte[] bytes = new byte[1024];
            //创建字节输出流
            OutputStream outputStream = response.getOutputStream();
            while ((len = inputStream.read(bytes)) >0) {
                outputStream.write(bytes, 0, len);
            }
            //关闭资源
            outputStream.close();
            inputStream.close();
        }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

注意:使用@WebServlet(name=“download”,urlPatterns = “/download.ii”)这个注解需要先在maven中添加两个依赖

<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>
    <!--引入Servlet结束-->
    <!--引入jsp相关开始-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
    </dependency>

然后启动tomcat ,点击下载按钮,就可以下载了,以上代码已经处理了文件名会有中文的格式的乱码问题。具体看代码!!

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐