今天遇到這么一個情況,在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); // 其他代碼略