sevlet实现下载文件功能

希望做一个小板块,实现文件的上传和下载,那么上传实现了,就需要实现下载,阅读了各位的博客总结了一下。在网页中通过超链接是可以访问我的资源的,浏览器不可访问的资源他就会下载到本地,像一些浏览器可以直接访问的如图片,txt文件浏览器会直接打开。这就需要我们在sevlet中统一处理文件下载。
在sevlet中,首先要获得jsp或html中的相应,文件名,通过文件名构建路径得到资源,在设置response的一些参数(要下载的)。这样之后使用io读取文件,在读入文件(不设置绝对路径)时候就是自动保存在浏览器默认位置。要下载文件的路径为:
这里写图片描述
sevlet核心代码:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class download extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      String filename= request.getParameter("filename");//获取文件名
        response.setContentType("text/html");
        System.out.println(filename);
        //设置文件MIME类型  
        response.setContentType(getServletContext().getMimeType(filename));  
        //设置Content-Disposition  
        response.setHeader("Content-Disposition", "attachment;filename="+filename);
        String fullFileName = getServletContext().getRealPath("/image/" + filename);  //获取绝对路径
        InputStream in = new FileInputStream(fullFileName);  
        OutputStream out = response.getOutputStream();  
        //PrintWriter out = response.getWriter();
        int b=0;
        while((b=in.read())!=-1)
        {
            out.write(b);
        }
        in.close();
        out.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doGet(request, response);
    }
}

点击去访问

这里写图片描述
文件下载成功,放置在默认下载路径。
至于大文件可以加缓存下载优化,其他优化的不太清楚。知道的话可以一起讨论。

猜你喜欢

转载自blog.csdn.net/qq_40693171/article/details/80460402