### Flex与.NET互操作:使用FileReference+HttpHandler实现文件上传/下载 #### 一、引言 在Flex的应用开发中,与ASP.NET、JSP、PHP等Web应用一样,经常会遇到需要处理文件上传和下载的需求。Adobe Flex是一种用于构建跨平台桌面应用程序和Web应用程序的强大工具,它提供了丰富的用户界面组件库,以及对多媒体、数据处理等功能的支持。为了实现文件的上传和下载功能,Flex SDK中提供了一个重要的类——`FileReference`。然而,`FileReference`仅仅是在客户端进行操作,要实现真正的文件上传或下载,还需要服务器端的支持。 本文将详细介绍如何利用Flex中的`FileReference`类结合ASP.NET中的`HttpHandler`来实现文件的上传和下载功能。我们将从Flex客户端的角度出发,探讨如何设置监听事件、处理文件选择及上传过程,并在最后实现与服务器端的交互。 #### 二、Flex客户端实现文件上传和下载 ##### 1. 客户端初始化 在Flex应用中,文件的上传和下载主要通过`FileReference`类实现。需要创建一个`FileReference`类型的对象实例,并为其添加相应的事件监听器,以处理文件的选择、上传进度及完成事件。 ```as private var stateText:String = "请选择一个文件上传"; private var file:FileReference = new FileReference(); // 添加事件监听器 file.addEventListener(Event.SELECT, onSelected); file.addEventListener(Event.COMPLETE, onCompleted); file.addEventListener(ProgressEvent.PROGRESS, onProgress); ``` 除了通过自定义函数进行初始化之外,还可以直接在MXML文件中重写`createChildren()`方法来完成初始化工作,这种方法更加简洁: ```as /** * createChildren比creationComplete事件更早发生 **/ protected override function createChildren():void { file.addEventListener(Event.SELECT, onSelected); file.addEventListener(Event.COMPLETE, onCompleted); file.addEventListener(ProgressEvent.PROGRESS, onProgress); } ``` ##### 2. 文件选择和上传事件处理 接下来定义三个事件处理函数:`onSelected`、`onCompleted` 和 `onProgress`,分别用于处理文件选择、上传完成和上传进度事件。 ```as internal function onSelected(evt:Event):void { stateText = "选择了文件" + file.name; } internal function onCompleted(evt:Event):void { stateText = "上传完毕!"; } internal function onProgress(evt:ProgressEvent):void { stateText = "已上传" + Math.round(100 * evt.bytesLoaded / evt.bytesTotal) + "%"; } ``` 这些事件处理函数可以帮助开发者实时更新文件上传的状态,提供良好的用户体验。 ##### 3. 发起上传请求 定义一个`onUpLoad`方法,用于实际发起文件上传请求。这个方法会检查所选文件是否为空,如果不为空,则创建一个`URLRequest`对象,并指定上传目标URL,然后调用`FileReference`的`upload()`方法完成文件上传。 ```as /** * 调用FileReference的实例方法upload()实现文件上传 **/ internal function onUpLoad():void { if (file.size > 0) { stateText = "正在上传文件:" + file.name; } var request:URLRequest = new URLRequest(); request.url = "http://localhost/Web/UpLoadHandler.ashx"; file.upload(request); } ``` 此外,可以通过按钮的`click`事件触发`onUpLoad()`方法,同时通过调用`file.browse()`方法来实现文件的选择。 #### 三、服务器端实现:使用ASP.NET HttpHandler 在服务器端,我们需要创建一个`HttpHandler`来接收并处理来自Flex客户端的文件上传请求。以下是一个简单的示例: 1. **创建HttpHandler** - 创建一个新的`HttpHandler`类,并覆盖`ProcessRequest`方法,以处理来自Flex客户端的请求。 ```csharp public class UpLoadHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { // 从请求中获取上传文件 HttpPostedFile postedFile = context.Request.Files["upload"]; if (postedFile != null && postedFile.ContentLength > 0) { string fileName = Path.GetFileName(postedFile.FileName); postedFile.SaveAs(Server.MapPath("~/uploads/") + fileName); context.Response.Write("File uploaded successfully."); } else { context.Response.Write("No file selected for upload."); } } public bool IsReusable { get { return false; } } } ``` 2. **配置Web.config** - 在ASP.NET项目中,需要在`web.config`文件中注册`HttpHandler`。 ```xml <configuration> <system.web> <httpHandlers> <add verb="*" path="UpLoadHandler.ashx" type="YourNamespace.UpLoadHandler, YourAssembly" /> </httpHandlers> </system.web> </configuration> ``` 通过以上步骤,我们成功地实现了Flex客户端与.NET服务器端之间的文件上传功能。这种方式不仅简单高效,而且能够很好地满足实际项目中的需求。




















- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整

- 粉丝: 3
- 资源: 941
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 著名网站架构设计(包括Facebook Google Amazon 共计123篇).rar
- 2025年广东省专科生智能网联汽车技术应用大赛竞赛指南:涵盖理论与实操技能考核
- apkToolV2.48
- 我是我是漂流记ssssggg
- nginx-threeJs-Womdows启动ThreejsDemo源码-20250325
- 中国十大城市群(地级市+县级)空间分布-可编辑mxd文件+标准shape文件+标准成图TIF
- qt QOffscreenSurface详解
- 软件测试使用的流程规范
- XYD company profile--中文版本.pdf
- 基于Inception-v3模型实现图像识别的Python和C++代码详解
- 修复机器码工具加简单说明
- SQL语言全面教程:从基础语法到实战项目的企业级应用
- lang-flow依赖包
- 可运营Niushop 多模版大型商城电商源码 v5.1.7
- Cracking the Coding Interview, 5th Edition.pdf
- 世界幸福报告数据集,包含4,000条记录,涉及24个与幸福、经济、社会和政治指标相关的列,涵盖了多个国家在多个年份的详细信息,适用于数据分析、机器学习


