文件下载乱码问题分析与解决
處理IE瀏覽器與Firefox瀏覽器亂碼問題
if (agent.contains("MSIE")) {
??????????????????????????? // IE瀏覽器
??????????????????????????? filename = URLEncoder.encode(filename, "utf-8");
??????????????????????????? filename = filename.replace("+", " ");
???????????????????? } else if (agent.contains("Firefox")) {
??????????????????????????? // 火狐瀏覽器
??????????????????????????? BASE64Encoder base64Encoder = new BASE64Encoder();
??????????????????????????? filename = "=?utf-8?B?"
????????????????????????????????????????? + base64Encoder.encode(filename.getBytes("utf-8"))
????????????????????????????????????????? + "?=";
???????????????????? } else if (agent.contains("Chrome")) {
??????????????????????????? // google瀏覽器
??????????????????????????? filename = URLEncoder.encode(filename, "utf-8");
???????????????????? } else {
??????????????????????????? // 其它瀏覽器
??????????????????????????? filename = URLEncoder.encode(filename, "utf-8");
???????????????????? }
package cn.learn.web.servlet;import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.net.URLEncoder;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import sun.misc.BASE64Encoder;public class DownloadServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 1.得到要下載 的文件名稱String filename = request.getParameter("filename");filename = new String(filename.getBytes("iso8859-1"), "utf-8");// 解決中文亂碼// 2.在d:/upload目錄下查找這個(gè)文件是否存在File file = new File("d:/upload/" + filename);if (file.exists()) {// /文件存在,完成下載// 下載注意事項(xiàng)1--設(shè)置下載文件的mimeTypeString mimeType = this.getServletContext().getMimeType(filename);response.setContentType(mimeType);String agent = request.getHeader("user-agent");if (agent.contains("MSIE")) {// IE瀏覽器filename = URLEncoder.encode(filename, "utf-8");} else if (agent.contains("Firefox")) {// 火狐瀏覽器BASE64Encoder base64Encoder = new BASE64Encoder();filename = "=?utf-8?B?"+ base64Encoder.encode(filename.getBytes("utf-8"))+ "?=";} else {// 其它瀏覽器filename = URLEncoder.encode(filename, "utf-8");}// 下載注意事項(xiàng)2--永遠(yuǎn)是下載response.setHeader("content-disposition", "attachment;filename="+ filename);FileInputStream fis = new FileInputStream(file); // 讀取要下載文件的內(nèi)容OutputStream os = response.getOutputStream(); // 將要下載的文件內(nèi)容通過輸出流寫回到瀏覽器端.int len = -1;byte[] b = new byte[1024 * 100];while ((len = fis.read(b)) != -1) {os.write(b, 0, len);os.flush();}os.close();fis.close();} else {throw new RuntimeException("下載資源不存在.");}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}?
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的文件下载乱码问题分析与解决的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件下载--服务器端编程操作
- 下一篇: 扩展--使用队列来优化递归操作完成文件下