1. 程式人生 > >java 下載檔案 && 下載檔名中文亂碼問題

java 下載檔案 && 下載檔名中文亂碼問題

package com.itheima.login;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse; import sun.misc.BASE64Encoder; public class ServletDownload extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //response.getWriter().append("Served at: ").append(request.getContextPath());
String filename = request.getParameter("filename"); //解決獲得中文引數的亂碼問題---- filename = new String(filename.getBytes("ISO8859-1"),"UTF-8");//美女.jpg //獲得請求頭中的User-Agent String agent = request.getHeader("User-Agent"); //根據不同瀏覽器進行不同的編碼 String filenameEncoder = ""
; if (agent.contains("MSIE")) { // IE瀏覽器 filenameEncoder = URLEncoder.encode(filename, "utf-8"); filenameEncoder = filenameEncoder.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐瀏覽器 BASE64Encoder base64Encoder = new BASE64Encoder(); filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else { // 其它瀏覽器 filenameEncoder = URLEncoder.encode(filename, "utf-8"); } //System.out.println(filename); //要下載的檔案型別----客戶端通過檔案的MINE型別區分型別 String mimeType = this.getServletContext().getMimeType(filename); response.setContentType(mimeType); //告訴客戶端該檔案不是直接解析而是以附件形式開啟(下載) response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder); //獲取檔案的絕對路徑 String filePath = this.getServletContext().getRealPath(filename); ServletOutputStream outputStream = response.getOutputStream(); FileInputStream in = new FileInputStream(filePath); byte[] buffer = new byte[1024]; int len = 0; while ((len = in.read(buffer)) > 0) { outputStream.write(buffer); } in.close(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //doGet(request, response); } }