关于jsp中的文件下载

第一种采用转发的方式:

package cn.jbit.download.servlet;  
  
import java.io.IOException;  
  
import javax.servlet.RequestDispatcher;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
public class DownloadServlet extends HttpServlet {  
  
    private static final long serialVersionUID = 6765085208899952414L;  
  
    public void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        doPost(request, response);  
    }  
  
    public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        String filedownload = "/upload/1/10213.jpg";//即将下载的文件的相对路径  
        String filedisplay = "10213.jpg";//下载文件时显示的文件保存名称  
        response.setContentType("application/x-download");//设置为下载application/x-download  
        //response.setContentType("application/x-msdownload");//设置为下载application/x-msdownload  
        //response.setContentType("application/octet-stream");//设置为下载application/octet-stream  
        response.addHeader("Content-Disposition", "attachment;filename="  
                + filedisplay);  
          
        try {  
            RequestDispatcher rd = request.getRequestDispatcher(filedownload);  
            if(rd != null)  
            {  
                rd.forward(request,response);  
            }  
            response.flushBuffer();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}  

二:通过输出流的方式:

package cn.jbit.download.servlet;  
  
import java.io.BufferedInputStream;  
import java.io.BufferedOutputStream;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
public class DownloadOfIOServlet extends HttpServlet {  
  public void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        doPost(request, response);  
    }  
      
    public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        String basePath = request.getSession().getServletContext().getRealPath("/upload");  
  
        String filedisplay = "helloworld.jpg";  
        String filedownload = basePath + File.separator + "helloworld.jpg";  
        response.setContentType("applicaiton/x-download");  
        response.addHeader("Content-Disposition", "attachment;filename="+filedisplay);  
          
        InputStream is = null;  
        OutputStream os = null;  
        BufferedInputStream bis = null;  
        BufferedOutputStream bos = null;  
          
        is = new FileInputStream(new File(filedownload));  
        bis = new BufferedInputStream(is);  
        os = response.getOutputStream();  
        bos = new BufferedOutputStream(os);  
          
        byte[] b = new byte[1024];  
        int len = 0;  
        while((len = bis.read(b)) != -1){  
            bos.write(b,0,len);  
        }  
          
        bis.close();  
        is.close();  
        bos.close();  
        os.close();  
    }  
}  

第三种:通过超链接的方式(注意不推荐,因为会暴露下载文件的位置)

原文地址:https://www.cnblogs.com/niechen/p/7685709.html