Web的文件下載

下載文件須要設置response的倆個響應頭及輸出流
         * 兩個頭一個流
         * 1. Content-Type:設置下載資源類型(MIME類型)
         * 2. Content-Disposition:下載框及下載文件名
         * 3. 流:下載文件的數據,文件流html

準備工做:須要導入 commons-io.jar包java

爲了解決下載框彈出文件名的亂碼問題,通常須要導入以下方法:瀏覽器

// 用來對下載的文件名稱進行編碼的!
	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;
	}

文件下載的具體步驟設置:this

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();

	}
相關文章
相關標籤/搜索