爱宜都网

 找回密码
 新会员注冊

QQ登录

Flex与.net服务器端实现文件上传和下载

已有 1305 次阅读2011-2-15 21:32 | Flex, 服务器, 文件, 下载

在Flex的应用开发中,同ASP.NET,JSP,PHP等应用一样,都会有上传/下载文件的应用需求,Flex的SDK也为我们提供了专门的类FileRefUdderence实现文件上传/下载 。Flex只是作为一个客户端,要实现上传或下载必须得为其提供一个服务端来接受上传或下载的请求,本文以ASP.NET中的HttpHandler作为文件上传的服务端来完成上传功能

     OK,我们从Flex客户端开始,看看客户端是通过什么方式想服务端发起请求。Flex客户端要完成文件上传下载都是通过FileRefUdderence来实现,首先得定义一个该类型对象实例:

1 [Bindable]

2 private var stateText:String = "请选择一个文件上传";

3 //通过调用file对象的方法来完成上传和下载功能

4 private var file:FileReference = new FileReference();

复制代码上传文件通常涉及到的有选择文件、上传文件以及上传完成这些最基本的处理过程。OK,下面我们就以这三个过程为例来看看Flex是怎么来完成文件的上传功能。首先为这三个功能点分别添加监听事件处理函数,在程序加载时调用:

1 private function initApp():void

2 {

3     file.addEventListener(Event.SELECT,onSelected);

4     file.addEventListener(Event.COMPLETE,onCompleted);

5     file.addEventListener(ProgressEvent.PROGRESS,onProgress);

6 }

复制代码这三个事件处理函数的详细定义如下(其中的stateText为String的变量,用于显示文件上传状态提示):

1 internal function onSelected(evt:Event):void

2 {

3     stateText = "选择了文件" + file.name;

4 }

5

6 internal function onCompleted(evt:Event):void

7 {

8     stateText = "上传完毕!";

9 }

10

11 internal function onProgress(evtrogressEvent):void

12 {

13     stateText = "已上传 " + Math.round(100 * evt.bytesLoaded / evt.bytesTotal) + "%";

14 }

复制代码到这里客户端就只差一步了,那就是完成发起上传请求的方法,实际上就是通过URLRequest对象创建一个与服务端的连接,然后直接调用FielReference类的upload()方法就可完成该功能,详细如下代码定义:

1 /**

2  * 调用FileReference的实例方法upload()实现文件上传

3  * */

4 internal function onUpLoad():void

5 {

6     if(file.size > 0)

7     {

8         stateText = "正在上传文件:" + file.name;

9     }

10     var request:URLRequest = new URLRequest();

11     request.url="http://localhost/Web/UpLoadHandler.aspx";

12     file.upload(request);

13 }

复制代码写好了upload方法,现在就是调用他了,通过按扭的click事件直接调用就可以,另外调用file.browse()方法则实现选择文件的功能,如下mxml代码描述:

1 <mx:TextInput x="10" y="57" id="txtFile" text="{stateText}" width="229"/>

2 <mx:Button x="247" y="57" label="选择" fontWeight="normal" click="{file.browse()}"/>

3 <mx:Button x="29" y="111" label="上传文件" width="111" fontWeight="normal" click="onUpLoad()"/>

复制代码
如上便完成了上传文件的Flex客户端开发,通过file.upload()方法,将把选择的文件通过二进制的形式发送到指定的服务端,并自动传递一个叫“fileName”的参数,服务端通过fileName便可以接收到客户端请求上传的文件。最后我们来看看服务端的UpLoadHandler.aspx的详细定义:

1 public class UpLoadHandler : IHttpHandler

2 {

3     //文件上传目录

4     private string uploadFolder = "UpLoad";

5

6     public void ProcessRequest(HttpContext context)

7     {

8         context.Response.ContentType = "text/plain";

9

10         HttpFileCollection files = context.Request.Files;

11         if (files.Count > 0)

12         {

13             string path = context.Server.MapPath(uploadFolder);

14             HttpPostedFile file = files[0];

15

16             if (file != null && file.ContentLength > 0)

17             {

18                 string savePath = path + "/" + context.Request.Form["fileName"];

19                 file.SaveAs(savePath);

20             }

21         }

22         else

23         {

24             context.Response.Write("参数错误");

25             context.Response.End();

26         }

27     }

28

29     public bool IsReusable

30     {

31         get

32         {

33             return false;

34         }

35     }

36 }

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 新会员注冊

QQ|站点统计|关于我们|手机版|法律顾问:熊安律师|爱宜都网 ( 鄂ICP备14016224号-1  鄂公网安备42058102000002号 )

GMT+8, 2024-5-21 00:04 , Processed in 0.023725 second(s), 8 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部