問題描述
以前寫過一個文件上傳下載的項目,在本地測試沒有問題,但最近在部署到Linux服務器實際應用發現,當文件名爲中文時,會報java.io.FileNotFoundException: ***(No such file or directory
的異常,文件下載後是一個空文件
由於我在代碼中已經進行了中文名的處理,所以項目本身沒有問題。查閱資料發現,問題出在本地主機操作系統(我的是Windows10)和Linux操作系統的編碼不同
具體的文件上傳下載實現可以看我的另外一篇博客,有源碼
Java實現帶表單參數的文件上傳、下載和文件打包下載
工具
Linux圖形化工具爲Xftp,Shell工具爲Xshell
IDE:IDEA
說明
我是通過Xftp直接將要下載的文件上傳到指定的Linux文件目錄
解決問題
1. 查看文件名
這裏需要注意,由於我是通過Xftp直接將要下載的文件上傳到指定的Linux文件目錄,所以在Xftp上看中文名能夠正常顯示,就會錯誤的認爲編碼沒問題
再通過Xshell來看
這裏就可以看出問題了,在Shell工具裏中文名不能正常顯示,所以肯定找不到文件
這時就需要將中文文件用Linux的編碼格式進行編碼
2. 解決問題
2.1 檢查Linux是否安裝convmv工具
rpm -qa |grep convmv
如圖說明安裝的有,若沒有,使用如下命令進行安裝
yum -y install convmv
或
yum install convmv //此命令需要手動確認
2.2 轉換文件名格式
convmv -f gbk -t utf8 -r --notest +文件路徑/文件名
eg:convmv -f gbk -t utf8 -r --notest /test/*.docx
由於中文名不能夠正常顯示,所以通過文件後綴來指定要進行編碼的文件
編碼完成,這時再看文件名
可以看到中文名已經能夠正常顯示了,這是文件就能夠正常下載了
注意:雖然在Shell下正常顯示,但這時通過Xftp工具查看中文名卻不能正常顯示了
這應該是Xftp編碼顯示的問題,不過不影響項目的運行
總結
到此,Linux中文名文件下載找不到路徑的問題就解決了,希望我的文章對你有所幫助