首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

Flex文件下载名称包含中文时报IOError错误,求高人指点,

2012-04-13 
Flex文件下载名称包含中文时报IOError异常,求高人指点,在线等!XML codeprivate var Url:Stringprivate va

Flex文件下载名称包含中文时报IOError异常,求高人指点,在线等!

XML code
private var Url:String;    private var downloadURL:URLRequest;    private var DownLoadfile:FileReference = new FileReference();;        protected function advanceddatagrid2_doubleClickHandler(event:MouseEvent):void    {        // TODO Auto-generated method stub        var browser:IBrowserManager = BrowserManager.getInstance();        browser.init();        Url = browser.base;        var i:int = Url.indexOf("gtyszxFlex-debug");        Url = Url.substring(0, i);//取得服务的url地址        var urlAdd:String = Url + "upload/" + filecenter.selectedItem.file_path;        var fileName:String = filecenter.selectedItem.file_name;        // TODO Auto-generated method stub        urlAdd = encodeURI(urlAdd);        trace(urlAdd);        downloadURL = new URLRequest(urlAdd);        configureListeners(DownLoadfile);        DownLoadfile.download(downloadURL, fileName);    }                private function configureListeners(dispatcher:IEventDispatcher):void{        dispatcher.addEventListener(Event.COMPLETE, completeHandler);        dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);    }        private function completeHandler(event:Event):void{        Alert.show("文件下载成功!", "温馨提示");    }                private function ioErrorHandler(event:IOErrorEvent):void{        Alert.show("文件下载失败,请联系系统管理员!\n" + event.toString(), "温馨提示");    }

Tomcat中server.xml也增加了 URIEncoding="UTF-8"
下载非中文名称的文件时,一切正常。但是下载文件名称包含中文时仍然报错:
文件下载失败,请联系系统管理员!
[IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2038: 文件 I/O 错误。 URL: http://fishibm/test/upload/1310441410593_基础资料0710.txt"]

按照他人的帖子经验解决了,但是都不见效果,无奈中,求高人指点!
QQ:657582

[解决办法]
我的问题解决了,提供下思路:
原因分析:
浏览器默认的编码方式是utf-8的,flex中地址默认是采用utf-8的,而tomcat默认的编码方式是ISO-8859-1的,即我们访问的地址都是iso-8859-1编码的,如果不设置tomcat中的编码方式即为默认的iso-8859-1方式,那么浏览器中的请求地址中的中文是不能被解析的,所以请求不到资源,因此,我们通过设置tomcat的编码方式为utf-8即可以通过浏览器访问到含有中文名的资源。同理默认情况下flex组件也访问不到带有中文路径的资源;
如果tomcat设置为utf-8的,我们可以访问http://localhost:8088/EncodingTest/resource/未命名.jpg类似的地址,但是对于flex中<mx:Image source="resources/体育/足球/1.jpg" />这样的组件还是显示不出来(这点我也疑惑,还望高人指点),但是我们设置为<mx:Image source="resources/%E4%BD%93%E8%82%B2/%E8%B6%B3%E7%90%83/1.jpg" />这样我们就能访问到了。
如果tomcat编码方式设置为GBK的话,对于flex组件<mx:Image source="resources/体育/足球/1.jpg" />我们是可以访问到的,但是对于<mx:Image source="resources/%E4%BD%93%E8%82%B2/%E8%B6%B3%E7%90%83/1.jpg" />这样的我们是访问不到的,对于浏览器中的地址http://localhost:8088/EncodingTest/resource/未命名.jpg,我们是访问不到的,但是对于我们把未命名进行GBK编码之后的%CE%B4%C3%FC%C3%FB替换了,即http://localhost:8088/EncodingTest/resource/%CE%B4%C3%FC%C3%FB.jpg就能访问了。至于如何取得中文的GBK编码我们可以通过java方法取得,比如String s="未命名.jpg";s=java.net.URLEncoder.encode(s,"GBK");这样就取得了“未命名.jpg”的GBK编码了。

总结如下:
总结出了一个基本解决中文编码的方法,即tomcat中设置编码为utf-8,flex中组件要访问资源的路径如果带有中文那么我们去把中文转换成utf-8格式的在赋值给组件的source属性,对于浏览器中访问的地址就可以是带有中文的访问地址了。

热点排行