exjs上傳圖片異常:com.jspsmart.upload.SmartUploadException: File can't be saved (1120).

錯誤:前端

文件名格式不對:未命??.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);

這個方法就能夠解決文件名中文爲基數位亂碼了。

相關文章
相關標籤/搜索