解决swfupload上传控件文件名中文乱码问题 三种方法 flash及最新版本11.8.800.168

目前比较流行的是使用SWFUpload控件,这个控件的详细介绍可以参见官网http://demo.swfupload.org/v220/index.htm

     在使用这个控件批量上传文件时发现中文文件名都是乱码,在网上查了半天,找了几个办法,特总结如下:

     第一种:fileName= new String(fileName.getBytes("UTF-8"),"GBK");

     用这种方式能解决大部分乱码,但如果文件名中有特殊字符和标点符号有时候会转不过来。

     第二种:我使用的是这种办法,测试已经通过
 

  1. /**在设置时需要设置一下上传事件 
  2.   *upload_start_handler : this.onUploadStart, 
  3.   *动态传参数,解决文件名中文乱码问题 
  4. **/  
  5. onUploadStart : function(file) {  
  6.   var post_params = this.settings.post_params;  
  7.   Ext.apply(post_params,{  
  8.          'fileName':encodeURIComponent(file.name)  
  9.   });  
  10.   this.setPostParams(post_params);  
  11. }  
  12. //在读取的类中将文件转码即可   
  13. String fName = URLDecoder.decode(fileName, "UTF-8");  
[c-sharp]  view plain copy
  1. /**在设置时需要设置一下上传事件 
  2.   *upload_start_handler : this.onUploadStart, 
  3.   *动态传参数,解决文件名中文乱码问题 
  4. **/  
  5. onUploadStart : function(file) {  
  6.   var post_params = this.settings.post_params;  
  7.   Ext.apply(post_params,{  
  8.          'fileName':encodeURIComponent(file.name)  
  9.   });  
  10.   this.setPostParams(post_params);  
  11. }  
  12. //在读取的类中将文件转码即可  
  13. String fName = URLDecoder.decode(fileName, "UTF-8");  

  第三种:配置web.config配置文件这种方法

swfupload是按照utf-8来编码的,而中文网站一般使用的编码是gb2312,你需要在使用sufupload的程序文件目录下重新定义xml.comfig文件,
如下:
<configuration>
    <appSettings/>
    <connectionStrings/>
    <system.web>
      <globalization requestEncoding="utf-8"/>
    </system.web>
</configuration>

现在的flash 最新版本,11.8.800.168 和 11.9 等有 bug,如果升级后,在使用 swfuploader、uploadify 等文件上传控件时,如果文件名是中文,就会出现中文乱码。大家可以知道到 swfupload 和 uploadify官方网站的 demo 里测试。

如果已经不小心升级了,可以通过以下办法解决:

  1. 到这来下载反安装文件,并卸载掉当前版本的 flash (通过别的办法卸载会无法安装旧版本的 flash 控件):http://download.macromedia.com/get/flashplayer/current/support/uninstall_flash_player.exe
  2. 到这来下载 相对旧一点的版本,并安装(也可以去别的地方下载):http://file.myfiles.com.cn/Photo/FlashPlayer_v118800129X.zip




本期除了API文档外,再附送《SWFUpload V2_2_0 说明文档.htm》 花生米AJAX-UI系列之:基于JQUERY的文件上传控件0.1版 特点: 可设定为是否单个上传,或者是批量上传; 可在上传过程中取消上传(单个或者批量取消); 在批量选择文件后,可以手工选择上传其中部分文件; 可在上传文件时顺带上传REQUEST传参,如SESSION_ID; 选择批量文件,在上传前,用户还可删除其中几个不想上传的文件; 本控件是对swfUpload这个FLASH插件的二次包装,控件类对象中的一个内部元素即为一个SWFUpload对象,可对其中进行相应的操作(详见附送的SWFUpload V2_2_0 说明文档.htm) 本控件内置一个保存了文件列表信息的数组$fileList,其单元为JSON对象,保存了每个文件的ID,称,类型,大小等信息; 可自定义按钮显示文字,文件上传的服务器端地址,以及SWF控件相对于当前网页的相对路径 本个控件包是建立在JSP基础上为大家展示上传效的,但实际该控件有用的部分仅在客户端前台;后台代码可以全部推翻,重新用PHP,.NET等其它动态语言编写 使用了本控件后,在后台编写代码时,不必编写实时监控文件上传进度的复杂代码,只用编写简单的处理保存上传文件的代码即可,因为FLASH插件会自动帮助算出上传进度,并实时定时给控件提供进度显示数据,这样就减轻了后台开发人员的工作量; 基于上一点,本控件前台也不会以长轮询方式访问服务器端,以获取文件上传进度情况,而是自己定时计算以上传的字节总数。因此当上传一个文件时,FLASH插件只会发一次传输请求,这样就改善了效率。 由于用FLASH传值时会给服务器造出一个新的SESSION,导致在服务端过滤器作用下可能会上传失败,因此用户可以在上专文件时,利用this.$swfUpload的addPostParam或者setPostParams方法,将原来的SESSION_id作为REQUEST参数传回服务端,服务端过滤器只要根据此SESSION_id判断相应用户是否“登录”即可.\
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值