zoukankan      html  css  js  c++  java
  • exjs上传图片异常:com.jspsmart.upload.SmartUploadException: File can't be saved (1120).

    错误:

    文件名格式不对:未命??.jpg

    SmartUpload mySmartUpload = new SmartUpload();

    com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);

    myFileName = new String(myFile.getFileName().getBytes("gbk"),"utf-8");

    寻找原因历程:

    1、尝试了上传几个不同的文件,发现文件名%2==0的时候,文件名不会出现最后一个中文变成??的情况

         猜想是编码格式的问题:于是包括jsp,js,request,response的编码格式统统都设置为utf-8。后来发现还是没有任何效果。

         猜想可能是ext的FormPanel组建的原因。

    2、在js界面获取FormPanel的绝对路径:Ext.getCmp('loadfile').getValue();(loadfile是组建FormPanel的id)没有出现乱码

        原因那应该就是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);

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


                 

     

  • 相关阅读:
    mock模拟数据的使用方法
    mac下载wepy报错解决方案
    收集:40种js常用技巧
    学习——面试现场整理的笔记
    mac又更新系统了!!!
    H5的优化方案
    双十一到了,把自己学习的运营笔记发一部分
    mongodb操作笔记
    HTTP协议及常见状态码
    跨域解决方案
  • 原文地址:https://www.cnblogs.com/zhutouying/p/3208344.html
Copyright © 2011-2022 走看看