第一种采用转发的方式:

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  Path = request.getSession().getServletContext().getRealPath("/upload");            String filedisplay = "helloworld.jpg";          String filedownload =  Path + 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();      }  }  

 

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

收藏 打印