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

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


                 

     

  • 相关阅读:
    Contiki 2.7 Makefile 文件(二)
    Contiki 2.7 Makefile 文件(一)
    The Contiki build system
    Contiki Network Stack
    【CCPC-Wannafly Winter Camp Day4 (Div1) I】咆咆咆哮(三分+贪心)
    【洛谷5246】[集训队互测2016] 消失的源代码(有趣的提答题)
    【CCPC-Wannafly Winter Camp Day4 (Div1) D】欧拉回路(分类讨论)
    【CCPC-Wannafly Winter Camp Day4 (Div1) F】小小马(分类讨论)
    【CCPC-Wannafly Winter Camp Day4 (Div1) C】最小边覆盖(简单题)
    【CCPC-Wannafly Winter Camp Day4 (Div1) A】夺宝奇兵(水题)
  • 原文地址:https://www.cnblogs.com/zhutouying/p/3208344.html
Copyright © 2011-2022 走看看