import org.apache.commons.io.IOUtils; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.*; import java.net.URLEncoder; import java.util.Base64; @WebServlet(name = "DownLoadStandardServlet", value = "/DownLoadStandardServlet") public class DownLoadStandardServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.获取下载的文件名 String downloadFile = request.getParameter("packagePath"); if(downloadFile!=null&&downloadFile!=""){ //2.获取上传文件路径 String uploadFilePath = request.getSession().getServletContext().getRealPath("upload"); //3.获取文件类型 String mimeType = request.getServletContext().getMimeType(downloadFile); //4.传之前,通过响应头告诉客户端返回的数据类型 response.setContentType(mimeType); System.out.println("下载的类型:"+mimeType); //5.设置下载窗口 -> Content-Disposition String userAgent = request.getHeader("User-Agent"); String newFileName = userAgent.contains("Chrome") ? URLEncoder.encode(downloadFile, "utf-8") : base64EncodeFileName(downloadFile); response.setHeader("Content-Disposition", "attachment;filename=" + newFileName); // 6. IO读写文件: 读出服务器文件,响应写入到浏览器 String path = uploadFilePath + File.separator + downloadFile; BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path)); BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream()); byte[] bs = new byte[8*1024]; int size = -1; while ((size = bis.read(bs)) != -1) { bos.write(bs, 0, size); } bis.close(); bos.close(); }else{ response.sendRedirect("GetStandardServlet"); } } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request,response); } public String base64EncodeFileName(String fileName) { Base64.Encoder base64Encoder = Base64.getMimeEncoder(); try { return "=?UTF‐8?B?" + new String(base64Encoder.encode(fileName.getBytes("UTF-8"))) + "?="; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } }
JSP+servlet+JDBC实现文件下载
最新推荐文章于 2023-07-02 16:36:49 发布