文件下載時文件名亂碼問題

文件下載時,對於不同的瀏覽器可能會存在文件名亂碼的問題,以下是我之前看到的一篇文章的解決方法,但是忘記文章的出處了,實在抱歉!

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String filepath = "c:/";// 需要下載的文件路徑
		String filename = "文檔.doc";// 需要下載的文件名字
		// 解決中文文件名亂碼問題
		if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
			filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");// firefox瀏覽器
		} else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
			filename = URLEncoder.encode(filename, "UTF-8");// IE瀏覽器
		}
		response.reset();// 如果有換行,對於文本文件沒有什麼問題,但是對於其它格
		// 式,比如AutoCAD、Word、Excel等文件下載下來的文件中就會多出一些換行符
		// 0x0d和0x0a,這樣可能導致某些格式的文件無法打開,有些也可以正常打開。同//時response.reset()
		// 這種方式也能清空緩衝區, 防止頁面中的空行等輸出到下載內容裏去
		response.setContentType("application/octet-stream");
		response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
		response.setHeader("Connection", "close");
		ServletOutputStream sos = response.getOutputStream();
		FileInputStream fis = null;
		File d = new File(filepath);
		if (d.exists()) {
			fis = new FileInputStream(filepath);//
			byte b[] = new byte[1000];
			int j;
			while ((j = fis.read(b)) != -1) {
				try {
					sos.write(b, 0, j);
				} catch (IOException exp) {
				}
			}
			fis.close();
			sos.flush();
			sos.close();
		}
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章