JavaWeb中檔案下載的程式碼,供參考
阿新 • • 發佈:2021-08-23
//檔案下載 @WebServlet("/down") public class DownLoadServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //0.跳過許可權檢查和積分檢查 //1.獲取被下載的資原始檔名稱String filename = req.getParameter("fileName"); System.out.println(filename); if (filename != null && "".equals(filename.trim())) { //對獲取到的引數進行重新編碼,因為可能會有中文亂碼的問題 filename = new String(filename.getBytes("ISO-8859-1"), "utf-8"); System.out.println(filename); }//2.從伺服器中找到被下載資源的絕對路徑 String path = req.getServletContext().getRealPath("/WEB-INF/download/" + filename); System.out.println(path); // ---------------------------------------------------------------------------------------- //2.1告訴瀏覽器不要直接開啟檔案,而是彈出下載框,儲存檔案 resp.setContentType("application/x-msdownload");//2.2應該設定下載檔案的建議儲存名稱 //--------------------------------------------------------------------------------- String useragent = req.getHeader("User-Agent"); //下面兩種方式谷歌瀏覽器全部都支援 if (useragent.contains("MSIE")) { //filename = URLEncoder.encode(filename, "UTF-8"); //System.out.println(filename); // IE瀏覽器的處理方式: resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); } else { //非IE瀏覽器的處理方式: //resp.setHeader("Content-Disposition", "attachment;filename="+(new String(filename.getBytes("utf-8"), "ISO-8859-1"))); filename = new String(filename.getBytes("utf-8"), "ISO-8859-1"); System.out.println(filename); } //--------------------------------------------------------------------------------- // 3.磁碟檔案-->程式中-->響應給使用者 Files.copy(Paths.get(path), resp.getOutputStream()); } }