//1、获取下载的文件名 String packagePath = request.getParameter("npicPath"); if(packagePath!=null&&packagePath!=""){ //2.获取上传文件路径 String uploadFilePath = request.getSession().getServletContext().getRealPath("upload"); //3.获取文件类型 String mimeType = request.getServletContext().getMimeType(packagePath); //4.传之前,通过响应头告诉客户端返回的数据类型 response.setContentType(mimeType); System.out.println("下载的类型:"+mimeType); //5.设置下载窗口 -> Content-Disposition String userAgent = request.getHeader("User-Agent"); String newFileName = userAgent.contains("Chrome") ? URLEncoder.encode(packagePath, "utf-8") : base64EncodeFileName(packagePath); response.setHeader("Content-Disposition", "attachment;filename=" + newFileName); // 6. IO读写文件: 读出服务器文件,响应写入到浏览器 String path = uploadFilePath + File.separator + packagePath; 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("showPage"); } } 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); }
下载参考代码
最新推荐文章于 2024-10-01 19:00:28 发布