使用response.setHeader("Content-Disposition","attachment;filename="+fName)下載文件,中文文件名無法顯示的問題


今天遇到這么一個情況,在Action代碼中進行文件下載:

  ActionForm得到file_id,通過file_id進行數據庫查詢得到file_name以及服務器硬盤上的file_uri,其中file_name是中文,然后通過如下代碼下載

response.setContentType("application/x-download");
response.setHeader("Content-Disposition","attachment;filename="+file_name);
OutputStream outputStream = response.getOutputStream();
InputStream inputStream = new FileInputStream(file_uri());
byte[] buffer = new byte[1024];
int i = -1;
while ((i = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, i);
}
outputStream.flush();
outputStream.close();
inputStream.close();

假設file_name的內容是:“工程文檔.docx”

那么下載的結果就是一個名為“docx”的文件(文件名+后綴名),顯然,文件名中的中文字符丟失了

上網查了資料,解決辦法如下(我也感覺很不可思議,但的確管用了)

response.setContentType("application/x-download");
file_name = new String(file_name.getBytes(), "ISO-8859-1");
response.setHeader("Content-Disposition","attachment;filename="+file_name);
// 其他代碼略


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM