錯誤:前端
文件名格式不對:未命??.jpgapp
SmartUpload mySmartUpload = new SmartUpload();jsp
com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);編碼
myFileName = new String(myFile.getFileName().getBytes("gbk"),"utf-8");url
尋找緣由歷程:orm
一、嘗試了上傳幾個不一樣的文件,發現文件名%2==0的時候,文件名不會出現最後一箇中文變成??的狀況utf-8
猜測是編碼格式的問題:因而包括jsp,js,request,response的編碼格式通通都設置爲utf-8。後來發現仍是沒有任何效果。get
猜測多是ext的FormPanel組建的緣由。servlet
二、在js界面獲取FormPanel的絕對路徑:Ext.getCmp('loadfile').getValue();(loadfile是組建FormPanel的id)沒有出現亂碼string
緣由那應該就是JSPSmart這個jar包自己的bug了。
解決方法:
1. 在servlet將上傳文件進行重命名,這樣就能夠避免文件名亂碼的問題。可是有些狀況是必須使用原來的文件名的,這個方法就沒法解決文藝了。
2. 對SmartUpload進行反編譯,修改代碼。這個百度上不少。
3. 聽說這個是SmartUpload的一個Bug,因此能夠關注官網更新jar包。不過若是其餘同事也用這個jar,不知道升級後會他們會不會有影響,因此他們不給我升級。
雖然姐以爲通常升級不會對原來的版本影響的,難道使用jdk7會形成jdk2的影響?
4. 聽說這個SmartUpload在上傳大文件類型的時候也有bug,建議使用Commons FileUpload
5. 在前端頁面也就是ext的FormPanel summit的時候截取文件名做爲參數傳遞到後臺,後臺就不須要用SmartUpload自己的方法去獲取文件名,這樣能夠避免文件名的亂碼。
@ js端截取文件名並經過url傳參到後臺:
var urlStr = Ext.getCmp('loadfile').getValue();
var fileName = urlStr.substring(urlStr.lastIndexOf("\\")+1,urlStr.lastIndexOf("."));
form.form.submit({
url : '/AdjustServlet?action=upload&slid='+slid+'&fileName='+fileName,
method : 'POST',
waitMsg: '正在上傳...',
success : function() {
//list();
Ext.Msg.alert('Message','上傳成功!');
win.close();
},
failure : function() {
Ext.Msg.alert('Error','上傳失敗.');
}
});
@ 後臺接收文件名而且用方法獲取後綴名,擴展名=文件名+"."+後綴名
String fileName = new String(request.getParameter("fileName").getBytes("iso-8859-1"),"utf-8");
String suffix = myFile.getFileExt();
myFileName.append(fileName).append(".").append(suffix);
這個方法就能夠解決文件名中文爲基數位亂碼了。