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);

这个方法就能够解决文件名中文为基数位乱码了。

相关文章
相关标签/搜索