Servlet中实现文件下载

文件下载

一看到文件就会想到用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 ,点击下载按钮,就可以下载了,以上代码已经处理了文件名会有中文的格式的乱码问题。具体看代码!!

相关推荐

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

邓靖川

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值