博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
exjs上传图片异常:com.jspsmart.upload.SmartUploadException: File can't be saved (1120).
阅读量:6975 次
发布时间:2019-06-27

本文共 1607 字,大约阅读时间需要 5 分钟。

错误:

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

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

             

 

转载于:https://www.cnblogs.com/zhutouying/p/3208344.html

你可能感兴趣的文章
Centos运行级别和开机过程
查看>>
Linux 装B之作酷炫小工具
查看>>
Citrix Avalon安装实验手册之一----Avalon概述及实验环境准备
查看>>
动态表单构建器——建造者模式
查看>>
Android 自动化测试
查看>>
MySQL 5.5 服务器变量详解(二)
查看>>
bootstrap table
查看>>
CentOS 7 yum 安装 MySQL5.7
查看>>
企业网络翻译官——DNS
查看>>
RocketMQ3.2.2生产者发送消息自动创建Topic队列数无法超过4个
查看>>
USG防火墙telnet实验
查看>>
[给12306支招]取消车票预订-采用全额预售(充值)
查看>>
linux下使profile和.bash_profile立即生效的方法
查看>>
Operations Manager 2012 SP1配置部署系列之(二) SCOM监控SCVMM
查看>>
父域与子域之的信任关系
查看>>
Android中后台定时任务实现,即时数据同步问题思考!
查看>>
开启笔记本win7的虚拟热点,让你的本本变成wifi
查看>>
ETL数据抽取策略
查看>>
Python学习day5作业-ATM和购物商城
查看>>
Kubernetes基于Metrics Server的HPA
查看>>