今天遇到一個問題,在Windows環境上開發,測試環境和正式環境服務器都是linux;
一個導出表格的功能,在本地沒問題,發布到linux服務器就報找不到文件問題,但是模板文件已經在linux下了。剛開始以為是模板放的路徑錯了,,確認好幾遍還是有問題。
經過大神的指導,最后發現原來linux文件的文字編碼都是UTF-8。
而我們一般的讀取文件的方法:
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO-8859-1"));//設置網頁顯示的文件編碼
File file = new File(path);
這里沒有指定讀取文件編碼的情況下,可能是拿不到文件的.
方法一:
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO-8859-1"));//設置網頁顯示的文件編碼
File file = new File( new String(path.getBytes("utf-8"), "utf-8"));
以UTF-8編碼去讀取文件就可以拿到了。
方法二:
讀取文件路徑不能有中文,就能避免此問題。
最后為了和系統其它模塊保持一致,我用了第二種方法。用uuid來保存模板的文件名,同時每個模板數據庫都需要保存一條記錄。
