Web的文件下载
下載文件需要設置response的倆個響應頭及輸出流
?? ??? ? * 兩個頭一個流
?? ??? ? * 1. Content-Type:設置下載資源類型(MIME類型)
?? ??? ? * 2. Content-Disposition:下載框及下載文件名
?? ??? ? * 3. 流:下載文件的數據,文件流
準備工作:需要導入?commons-io.jar包
為了解決下載框彈出文件名的亂碼問題,一般需要導入如下方法:
// 用來對下載的文件名稱進行編碼的!public static String filenameEncoding(String filename, HttpServletRequest request) throws IOException {String agent = request.getHeader("User-Agent"); //獲取瀏覽器if (agent.contains("Firefox")) {BASE64Encoder base64Encoder = new BASE64Encoder();filename = "=?utf-8?B?"+ base64Encoder.encode(filename.getBytes("utf-8"))+ "?=";} else if(agent.contains("MSIE")) {filename = URLEncoder.encode(filename, "utf-8");} else {filename = URLEncoder.encode(filename, "utf-8");}return filename;}文件下載的具體步驟設置:
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");/** 兩個頭一個流* 1. Content-Type:下載資源類型* 2. Content-Disposition:下載框及下載文件名* 3. 流:下載文件的數據,文件流*/String filename = "D:/音樂/韓紅-天路.mp3";// 為了使下載框中下載文件名顯示中文文件名稱不出亂碼!String framename = filenameEncoding("流光%飛舞.mp3", request);//通過文件名稱獲取MIME類型String contentType = this.getServletContext().getMimeType(filename);//設置下載框String contentDisposition = "attachment;filename=" + framename;// 文件流FileInputStream input = new FileInputStream(filename);//設置頭response.setHeader("Content-Type", contentType);response.setHeader("Content-Disposition", contentDisposition);// 獲取綁定了響應端的流ServletOutputStream output = response.getOutputStream();IOUtils.copy(input, output);//把輸入流中的數據寫入到輸出流中。input.close();}?
轉載于:https://www.cnblogs.com/MrQlyn/p/10236309.html
總結
- 上一篇: python的数据结构
- 下一篇: md5加密+盐方式一