主题:  AIX操作系统中Coldfusion上传中文文件解决方案

金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
#12003/8/11 14:13:16
存在问题
虽然Coldfusion最近刚刚升级到了6.1版本,并且声称对于汉语的支持有了很大的改正,但时在AIX操作系统上面还是没有得到根本的解决,页面显示汉字仍然需要加入指明编码方式的四行源码,并且每页都需要加入。虽然这样可以解决大部分问题,但是在上传文件的操作中如果遇到包含有中文文件名或路径的时候,上传就不能成功,虽然去掉指明编码方式的源码后可以上传,但上传后的文件名与原文件名不符,这样导致了读文件的时候出现了一定的问题,尤其是当在Flash里面读取文件的时候(声音与图片)。针对这个问题,经过了多方面的尝试,最后终于找到了这个解决方案。
解决方法
因为是编码方式的问题,所以就要从编码方式入手来解决这个问题。
1、需要对上传文件需要的form页面进行修改,将原来的“gb2312”编码方式改为“iso8859-1”编码方式:
upload.cfm:







upload the file



  
  




如上面源代码就是一个最简单的上传文件的form页面,因为编码方式为ISO8859-1所以页面中不能出现中文(因为不能显示中文),因此提交后的页面也不能与此页面为相同页面,必须分开设计,这也是此解决方案的最大缺陷。
2、因为如果用原来的cffile标签进行上传,则上传后为乱码文件,需要用比较多的代码来对上传后的文件及其上传后的变量进行处理,因此这里制作一个自定义标签来代替原来的cffile标签,为了用起来方便,新的标签里面的参数与原来cffile完全相同,因为在aix下面读取文件也需要对文件名进行转换(中文文件名),因此也将read文件加入到新的标签中,用法与cffile完全一样,因为此标签仅仅用户AIX操作系统(其余的UNIX操作系统没有进行测试),因此将标签取名叫file_aix,下面是file_aix的源代码:
file_aix.cfm:


  
  
    
    
    
    
      
      
      
      
      
    
  
  



  
  
  
  
  












  
    
    
      
      
      
      
      
      
      
      
      
      
      
      
    
    
    
      
      
      
      
      
    
    
    
  
  
  


上面是新标签的源代码,其中一开始是转换文件名与编码方式的function,后面是对upload与read文件的操作。
既然为自定义tag,则我们应该把这个文件放在CustomTags文件夹下面(虽然直接放在使用它的目录下面也可以,但我们不提倡这样使用),在单独版本的Coldfusion下面,CustomTags在CfusionMX跟目录下面,而在Coldfusion for j2ee下面,CustomTags目录在cf应用的web-inf下面的cfusion目录下面。
3、将自定义tag放好后,我们就可以像用cffile一样用这个自定义的tag了,我们就根据upload.cfm中制定的文件test_file_aix.cfm来进行文件上传操作:
test_file_aix.cfm:




 
 





无标题文档





在这个文件中,编码方式使用了“gb2312”,所以这个文件可以正确的显示中文,另外cf_file_aix的用法与cffile完全一样,并且upload后得到的cffile对象也原来的一样,因此应用起来比较方便。


5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER

7yue_5d

职务:普通成员
等级:1
金币:0.0
发贴:32
#22003/8/19 14:17:14
Aix...玩不起。。。主要偶自己没钱搞。。。