宝哥软件园

Flex和之间的互操作性 NET使用文件引用HttpHandler上传/下载文件

编辑:宝哥软件园 来源:互联网 时间:2021-10-26

在Flex的应用开发中,就像ASP一样。NET、JSP、PHP等应用,上传/下载文件都会有应用需求,而Flex的SDK也为我们提供了一个特殊的类FileRefUdderence来实现文件的上传/下载。Flex只是一个客户端,要上传或下载,必须要有服务器来接受上传或下载的请求。本文采用ASP.NET的HttpHandler作为文件上传服务器,完成上传功能。好,让我们从Flex客户端开始,看看客户端是如何向服务器发送请求的。Flex客户端的文件上传和下载是通过文件更新实现的。首先,定义一个这种类型的对象实例:1[可绑定]2 privatevartestatetext 3360 string='请选择一个要上传的文件';3//上传下载功能通过调用文件对象4 privatevarfile : file reference=New file reference()的方法完成;上传文件通常包括选择文件、上传文件和完成这些基本过程。好了,我们以这三个过程为例,看看Flex是如何完成文件上传功能的。首先,为这三个函数点添加监视事件处理程序,并在程序加载时调用它们:1 internal functioninitapp(): void 2 { 3 file。addeventlistener(事件。选择,on selected);4file.addEventListener(事件。完成,已完成);5 file . addeventlistener(progress event。PROGRESS,on PROGRESS);6}另外,在加载程序进行初始化操作时,我们不能调用上面定义的函数,应用程序(mxml)的初始化操作是通过creationComplete方法完成的。另外还有一个方法createChildren()在它之前执行,我们可以直接在mxml下重写这个方法来初始化应用程序。以下情况:1/**2*createChildren早于creationComplete事件3 * */4 protected override function create children(): void 5 { 6 file。addeventlistener(事件。选择,选中时);7file.addEventListener(事件。完成,已完成);8 file . addeventlistener(progress event。PROGRESS,on PROGRESS);9}这三个事件处理函数的详细定义如下(其中stateText为String的变量,用于显示文件上传状态的提示):1 InternalFunctionSelected(EVT 3360事件): void 2 { 3 state text=' file ' file . name被选中;4 } 56 internalfunctioncompleted(evt : event): void 7 { 8 state text='上传完成!';9} 1011内部函数进行中(evt: progress事件): void 12 { 13 state text=' uploaded ' math . round(100 * evt . bytes loaded/evt . bytes total)' % ';14}这里,客户端只有一步之遥,也就是启动上传请求的方法实际上是通过URLRequest对象创建与服务器的连接,然后直接调用FielReference类的upload()方法来完成这个功能。详细代码定义如下:1/**2*调用FileReference的实例方法upload()实现文件上传3 * */4 internalfunctionUpload(): void 5 { 6if(file . size0)7 { 8 state text=' uploading file ':file . name;9 } 10 varrequest : urlrequest=new urlrequest();11 request . URL=' http://localhost/Web/uploadhandler . ashx ';12file.upload(请求);13}写好上传方法后,就该调用了,只需通过按钮的click事件直接调用,调用file.browse()方法实现选择文件的功能。以下mxml代码描述:1mx : text input x=' 10 ' y=' 57 ' id=' txt file ' text=' { state text } ' width=' 229 '/2mx : buttonx=' 247 ' y=' 57 ' label=' select ' font weight=' normal ' click=' { file . browse()} '/。3m x : buttonx=' 29 ' y=' 111 ' label=' upload file ' width=' 111 ' font weight=' normal ' click=' on upload()'/如上所述,已经开发了用于上传文件的Flex客户端。将选定的文件以二进制形式发送到指定的服务器,并自动传递一个名为“fileName”的参数。服务器可以通过文件名接收客户端请求上传的文件。

最后我们来看看服务端的UpLoadHandler.ashx的详细定义:1 public clasuploadhandler : ihttphandler 2 { 3//文件上传目录4 privatestringuploaddfolder=' UpLoad ';56 publicatavitpprocessrequest(Httpcontextcontext)7 { 8 context .响应。内容类型='文本/纯文本;910HttpFileCollectionfiles=上下文。请求文件;11if(文件Count0)12{13stringpath=context .服务器。地图路径(上传文件夹);14httptedfilefile=files[0];1516if(文件!=nullfile .内容长度0)17 { 18 stringsavepath=path/'上下文。请求。格式[' FIlename '];19文件。另存为(保存路径);20 } 21 } 22else23 {上下文。回应。写下('参数错误');25上下文。响应。end();26 } 27 } 2829 publiboulisreusable 30 { 31 get 32 { 33 }返回false34}35}36}如上一系列的步骤便可完成上传文件的功能,下面便是上传文件示例程序运行截图

实现了文件上传。让我们看看如何下载文件。以上面上传例子中上传的mp3为例。让我们看看如何从服务器(http://localhost/Web/UpLoad/做你的爱人. mp3)下载文件(做你的爱人. mp3)。要实现只要下载的文件存在,文件的下载对于服务器来说都是OK的,就像上传文件一样,需要实例化FielReference对象的一个实例,并为其添加相应的事件处理函数:1 privatefarfiledown : file reference=new file reference();1/**2*createChildren早于creationComplete事件3 * */4 protected override function create children(): void 5 { 6 super。create children();7file.addEventListener(事件。选择,on selected);8file.addEventListener(事件。完成,已完成);9 file . addeventlistener(progress event。PROGRESS,on PROGRESS);10//实现文件下载11 file down . addevent listener(event.complex,on down completed);12 file down . addeventlistener(progress event。PROGRESS,OnDownProgress);13}如上所述,文件下载成功后的事件处理程序和下载过程处理程序是为fileDown注册的,这是文件下载的一个示例。以下是两种方法的详细定义:1内部函数on down completed (evt:事件)3360 void 2 { 3 varfileref 3360 file reference=evt . currenttargetafilereference;4resultLabel.text='文件名:' fileRef.name '已下载!';5} 67内部函数on down progress(evt : progress事件): void 8 {9downstate.text='已下载:' math . round(100 * evt . bytes loaded/evt . bytes total)' % ';10}完成了对象事件的开发,最终惩罚了下载请求。直接调用FileReference类提供的download()方法可以:1/**2*调用FileReference类的实例方法download()实现文件下载3 * */4 internalfuncondownload(): void 5 { 6 varrequest 3360 URL request=new URL request()。7.URL=' http://localhost :1146/上传/做你的爱人. MP3 ';8fileDown.download(请求);9}程序执行download()方法时,会自动弹出选择保存文件的对话框,根据实际情况选择保存路径即可。以下是上传下载的完整代码:

实现上传和下载的完整代码1?xmlversion='1.0 '编码='utf-8 '?2mx : applicationxmlns : MX=' http://www .土坯房。com/2006/mxml ' layout=' absolute ' 3m x : panel x=' 49 ' y=' 66 ' width=' 551 ' height=' 164 ' layout=' absolute ' 4 title='使用文件引用上传/下载文件font size=' 12 ' 5mx : hdividedbox=' 10 ' y=' 10 ' width=' 511 ' height=' 102 ' 6mx : canvasid=' left '底色=' # d7f 4ff '高度=' 100% '宽度=' 209 ' 7m x 3360 textinputx=' 4 ' y=' 20 ' id=' txt file ' text=' { state text } '宽度=' 135 '/8m选择font weight=' normal ' click=' { file。 browse()} '/9mm x : buttonx=' 31 ' y=' 68 ' label='上传文件width=' 111 ' font weight=' normal ' click=' onUpLoad()'/10/MX : canvasid 11m x 3360 canvasid=' right '背景色=' # d7f 4ff ' height=' 100% ' width=' 282 ' 12mx 3360 lablex=' 6 ' y=' 9 ' text=' http://localhost/Web/UpLoad/做你的爱人。MP3 '/13Mx : buttonx=' 10 ' y=' 37 '标签='下载文件font weight=' normal ' click=' onDownLoad()'/14 MX 3360 lablex=' 10 ' y=' 74 ' width=' 272 ' id=' result label '/15m x 3360 textinputx=' 122 ' y=' y=' 37 ' id=' downState '/16/MX : hdividedbox 1819/MX 3360面板20m x 3360脚本21![CDATA[22[可绑定]23 privatevartestatetext : string='请选择一个文件上传;2425私有varfile :文件引用=新文件引用();26 privatevarfiledown :文件引用=新文件引用();2728/* * 29 *创建孩子比创建完整的事件更早发生30 * */31 protectedoverridefficationcreatechildren(): void 32 { 33 super。create children();34file.addEventListener(事件。选择,on selected);35file.addEventListener(事件。完成,已完成);36档。addeventlistener(进度事件.PROGRESS,on PROGRESS);3738fileDown.addEventListener(事件。完成,OnDownCompleted);39英里。addeventlistener(进度事件.PROGRESS,OnDownProgress);40 } 4142//internalfunctioninitApp(): void 43/{ 44//文件。添加事件侦听器(事件.选择,on selected);45//file.addEventListener(事件。完成,已完成);46//文件。addeventlistener(进度事件.PROGRESS,on PROGRESS);47//} 4849 internalfunconcerted(evt :事件): void 50 { 51 state text='选择了文件":"文件名;52 } 5354内部功能完成(evt:Event事件事件):无效55{56stateText='上传完毕!';57 } 585960 internalfunctioncompleted(evt :事件): void 61 { 62 varfileref :文件引用=evt。当前targetassefilereference' 63resultLabel.text='文件名:' fileRef.name '下载完毕!64 } 6566 internalfunconprogress(evt :进度事件): void 67 { 68 state text='已上传:“数学。圆形(100 * evt。bytesloaded/evt。bytes total)' % ';6970 } 7172内部功能下降进度(evt :进度事件):无效73 { 74下降状态。文本='已下载:“数学。圆形(100 * evt。bytesloaded/evt。bytes total)' % ';75}7677/**78*调用文件引用的实例方法上传()实现文件上传79 * */80 internalfuncanload(): void 81 { 82 if(file。大小0)83 { 84状态文本='正在上传文件:' file . name 85 } 86 var request : URL request=new URL request();87请求。URL=http://localhost/Web/uploadhandler。ashx88file.upload(请求);89}9091/**92*调用文件引用类的实例方法下载()实现文件下载93 * */94 internalfunknownload(): void 95 { 96 var request : URL request=new URL request();97请求。URL=' http://localhost/WeB/UpLoad/做你的爱人。MP3 ';98fileDown.download(请求);99 } 100]]101/MX 3360脚本102/MX 3360应用程序103程序运行截图

/span 37 ' id=' downState '/16/MX :画布17/MX 3360 hdividedbox 1819/MX :面板20m x 3360脚本21![CDATA[22[可绑定]23 privatevartestatetext : string='请选择一个文件上传;2425私有varfile :文件引用=新文件引用();26 privatevarfiledown :文件引用=新文件引用();2728/* * 29 *创建孩子比创建完整的事件更早发生30 * */31 protectedoverridefficationcreatechildren(): void 32 { 33 super。create children();34file.addEventListener(事件。选择,on selected);35file.addEventListener(事件。完成,已完成);36档。addeventlistener(进度事件.PROGRESS,on PROGRESS);3738fileDown.addEventListener(事件。完成,OnDownCompleted);39英里。addeventlistener(进度事件.PROGRESS,OnDownProgress);40 } 4142//internalfunctioninitApp(): void 43/{ 44//文件。添加事件侦听器(事件.选择,on selected);45//file.addEventListener(事件。完成,已完成);46//文件。addeventlistener(进度事件.PROGRESS,on PROGRESS);47//} 4849 internalfunconcerted(evt :事件): void 50 { 51 state text='选择了文件":"文件名;52 } 5354内部功能完成(evt:Event事件事件):无效55{56stateText='上传完毕!57 } 585960 internalfunctioncompleted(evt :事件): void 61 { 62 varfileref :文件引用=evt。当前targetassefilereference' 63resultLabel.text='文件名:' fileRef.name '下载完毕!64 } 6566 internalfunconprogress(evt :进度事件): void 67 { 68 state text='已上传:“数学。圆形(100 * evt。bytesloaded/evt。bytes total)' % ';6970 } 7172内部功能下降进度(evt :进度事件):无效73 { 74下降状态。文本='已下载:“数学。圆形(100 * evt。bytesloaded/evt。bytes total)' % ';75}7677/**78*调用文件引用的实例方法上传()实现文件上传79 * */80 internalfuncanload(): void 81 { 82 if(file。大小0)83 { 84状态文本='正在上传文件:' file . name 85 } 86 var request : URL request=new URL request();87请求。URL=http://localhost/Web/uploadhandler。ashx88file.upload(请求);89}9091/**92*调用文件引用类的实例方法下载()实现文件下载93 * */94 internalfunknownload(): void 95 { 96 var request : URL request=new URL request();97请求。URL=' http://localhost/WeB/UpLoad/做你的爱人。MP3 ';98fileDown.download(请求);99 } 100]]101/MX 3360脚本102/MX 3360应用程序103程序运行截图

更多资讯
游戏推荐
更多+