文件下载时文件名乱码问题

文件下载时,对于不同的浏览器可能会存在文件名乱码的问题,以下是我之前看到的一篇文章的解决方法,但是忘记文章的出处了,实在抱歉!

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


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