1. 程式人生 > 其它 >JavaWeb中檔案下載的程式碼,供參考

JavaWeb中檔案下載的程式碼,供參考

//檔案下載
@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()); } }