背景:由于我目前的公司是电信类项目,采用ext+flex TWaver做的页面,ext已经做好了上传和下载,我是相当于2次开发做一个flex 的附件查看和下载,所以我开始是把ext那边的a标签的内容直接写在在label.htmlText中,结果发现在flex TWaver的容器的页面中,加载一次页面只能下载一个文件,要想在下载第二个,只能关掉这个页面在重新打开。然后只能采用felx提供的下载类。以下代码大部分是在网上找的,但这里与他们的不同,最关键是**file.download(URLRequest对象,浏览器保存窗口中的文件名);**这个“**浏览器保存窗口中的文件名**”网上其他人都没讲,这个可是害的我**好苦**啊!废话不多说了,以下是详细代码:
```
private function fileDownload(event:Event):void{
var attachmentLabel:Label = event.currentTarget as Label;
var circuitConfigurationServiceImpl:CircuitConfigurationServiceImpl =
BeanController.getInstance().getBean("circuitConfigurationService") as CircuitConfigurationServiceImpl;
//新建请求地址
var downloadURL:URLRequest = new URLRequest(circuitConfigurationServiceImpl.serviceUrl + "/downloadAttachment.html?attachmentId=" +
attachmentLabel.id);
//实例文件上传、下载对象。
var file:FileReference = new FileReference();
//监听下载成功事件。
file.addEventListener(Event.COMPLETE, fileCompleteHandler);
// configureListeners(file);//这个函数里有整个下载或上传的步骤的事件,API文档中也有。
//虽然 Flash Player 没有限制可上载或下载的文件的大小,但是播放器正式支持的上载或下载文件大小最大为 100 MB。
//第一个参数为请求地址对象,第二个参数为浏览器保存窗口中的文件名(这个文件不是在后台设置的,就是在这)
file.download(downloadURL,attachmentLabel.text);
//为了修改浏览器保存窗口中的文件名,在网上找资料,并自己看文档、测试,一下午加一晚上都没搞定,就在要放弃的时候,
//突然就想到FileReference有没有其他下载方法或者download有没有其他参数,终于在凌晨1点10分左右终于测试成功,其他API文档中也有说明,有两个参数,但当时看的太着急,没注意,细节决定成败啊!!!希望各位同胞引以为戒。
}
private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.CANCEL, cancelHandler);
dispatcher.addEventListener(Event.COMPLETE, fileCompleteHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
dispatcher.addEventListener(Event.SELECT, selectHandler);
}
private function fileCompleteHandler(event:Event):void{
Alert.show("下载成功:"+event);
}
```
上传代码还有点bug,正在排查中,过几天就更新这篇文章。
Flex中的下载
最新推荐文章于 2021-04-29 05:01:35 发布