- 浏览: 64598 次
- 性别:
- 来自: 深圳
最新评论
-
txtxp:
太神奇了 谢谢
Flex AIR中嵌入html控件导致的null object reference错误解决 -
damoqiongqiu:
Flex绝对会成为一个大杯具
选择Flex的理由 -
jssay:
地址都打不开,何解?
免费flash抽奖程序 -
ls6576837:
学习了,谢谢
Flex AIR中嵌入html控件导致的null object reference错误解决 -
eillittwang:
不错。。谢啦。。挺详细的。
AIR Express Install Badge在线安装出错及解决方法
在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 internal function initApp():void
2 {
3 file.addEventListener(Event.SELECT,onSelected);
4 file.addEventListener(Event.COMPLETE,onCompleted);
5 file.addEventListener(ProgressEvent.PROGRESS,onProgress);
6 }
另外我们也可以不用上面这中定义一个函数在程序加载时调用进行初始化操作,应用程序(mxml)的初始化操作又creationComplete方法完成,另外还有一个比它先执行的方法createChildren(),我们可以直接在mxml下重写该方法来实现应用程序的初始化,如下:
1 /**
2 * createChildren 比 creationComplete 事件更早发生
3 * */
4 protected override function createChildren():void
5 {
6 file.addEventListener(Event.SELECT,onSelected);
7 file.addEventListener(Event.COMPLETE,onCompleted);
8 file.addEventListener(ProgressEvent.PROGRESS,onProgress);
9 }
这三个事件处理函数的详细定义如下(其中的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(evt:ProgressEvent):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.ashx";
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.ashx的详细定义:
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 }
如上一系列的步骤便可完成上传文件的功能,下面便是上传文件示例程序运行截图:
实现了文件上传下面来看看怎么实现文件下载, 以上面上传示例中上传的mp3为例,下面我们来看看怎么从服务器(http://localhost/Web/UpLoad/做你的爱人.mp3)上完成文件(做你的爱人.mp3)的下载。
要实现文件下载对服务器端只要保证被下载文件存在就OK,同上传文件一样需要实例化一个FielReference对象的实例,并为其添加相应的事件处理函数:
1 private var fileDown:FileReference = new FileReference();
1 /**
2 * createChildren 比 creationComplete 事件更早发生
3 * */
4 protected override function createChildren():void
5 {
6 super.createChildren();
7 file.addEventListener(Event.SELECT,onSelected);
8 file.addEventListener(Event.COMPLETE,onCompleted);
9 file.addEventListener(ProgressEvent.PROGRESS,onProgress);
10 //实现文件下载
11 fileDown.addEventListener(Event.COMPLETE,onDownCompleted);
12 fileDown.addEventListener(ProgressEvent.PROGRESS,onDownProgress);
13 }
如上为实现下载文件的实例fileDown注册了成功下载文件后事件处理函数和下载过程处理函数,下面是两个方法的详细定义:
1 internal function onDownCompleted(evt:Event):void
2 {
3 var fileRef:FileReference = evt.currentTarget as FileReference;
4 resultLabel.text = "文件名:" + fileRef.name + "下载完毕!";
5 }
6
7 internal function onDownProgress(evt:ProgressEvent):void
8 {
9 downState.text = "已下载: " + Math.round(100 * evt.bytesLoaded / evt.bytesTotal) + "%";
10 }
完成了对象事件的开发,最后便上惩罚下载请求了,直接调用FileReference类所提供的download()方法既可:
1 /**
2 * 调用FileReference类的实例方法download()实现文件下载
3 * */
4 internal function onDownLoad():void
5 {
6 var request:URLRequest = new URLRequest();
7 request.url="http://localhost:1146/UpLoad/做你的爱人.mp3";
8 fileDown.download(request);
9 }
程序执行到download()方法的时候会自动弹出选择保存文件对话框,根据实际情况选择好保存路径就OK。下面是实现上传和下载的完整代码:
实现上传和下载的完整代码
1 <?xml version="1.0" encoding="utf-8"?>
2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3 <mx:Panel x="49" y="66" width="551" height="164" layout="absolute"
4 title="使用FileReference上传/下载文件" fontSize="12">
5 <mx:HDividedBox x="10" y="10" width="511" height="102">
6 <mx:Canvas id="left" backgroundColor="#D7F4FF" height="100%" width="209">
7 <mx:TextInput x="4" y="20" id="txtFile" text="{stateText}" width="135"/>
8 <mx:Button x="147" y="20" label="选择" fontWeight="normal" click="{file.browse()}"/>
9 <mx:Button x="31" y="68" label="上传文件" width="111" fontWeight="normal" click="onUpLoad()"/>
10 </mx:Canvas>
11 <mx:Canvas id="right" backgroundColor="#D7F4FF" height="100%" width="282">
12 <mx:Label x="6" y="9" text="http://localhost/Web/UpLoad/做你的爱人.mp3"/>
13 <mx:Button x="10" y="37" label="下载文件" fontWeight="normal" click="onDownLoad()"/>
14 <mx:Label x="10" y="74" width="272" id="resultLabel"/>
15 <mx:TextInput x="122" y="37" id="downState"/>
16 </mx:Canvas>
17 </mx:HDividedBox>
18
19 </mx:Panel>
20 <mx:Script>
21 <![CDATA[
22 [Bindable]
23 private var stateText:String = "请选择一个文件上传";
24
25 private var file:FileReference = new FileReference();
26 private var fileDown:FileReference = new FileReference();
27
28 /**
29 * createChildren 比 creationComplete 事件更早发生
30 * */
31 protected override function createChildren():void
32 {
33 super.createChildren();
34 file.addEventListener(Event.SELECT,onSelected);
35 file.addEventListener(Event.COMPLETE,onCompleted);
36 file.addEventListener(ProgressEvent.PROGRESS,onProgress);
37
38 fileDown.addEventListener(Event.COMPLETE,onDownCompleted);
39 fileDown.addEventListener(ProgressEvent.PROGRESS,onDownProgress);
40 }
41
42 // internal function initApp():void
43 // {
44 // file.addEventListener(Event.SELECT,onSelected);
45 // file.addEventListener(Event.COMPLETE,onCompleted);
46 // file.addEventListener(ProgressEvent.PROGRESS,onProgress);
47 // }
48
49 internal function onSelected(evt:Event):void
50 {
51 stateText = "选择了文件:" + file.name;
52 }
53
54 internal function onCompleted(evt:Event):void
55 {
56 stateText = "上传完毕!";
57 }
58
59
60 internal function onDownCompleted(evt:Event):void
61 {
62 var fileRef:FileReference = evt.currentTarget as FileReference;
63 resultLabel.text = "文件名:" + fileRef.name + "下载完毕!";
64 }
65
66 internal function onProgress(evt:ProgressEvent):void
67 {
68 stateText = "已上传: " + Math.round(100 * evt.bytesLoaded / evt.bytesTotal) + "%";
69
70 }
71
72 internal function onDownProgress(evt:ProgressEvent):void
73 {
74 downState.text = "已下载: " + Math.round(100 * evt.bytesLoaded / evt.bytesTotal) + "%";
75 }
76
77 /**
78 * 调用FileReference的实例方法upload()实现文件上传
79 * */
80 internal function onUpLoad():void
81 {
82 if(file.size > 0)
83 {
84 stateText = "正在上传文件:" + file.name;
85 }
86 var request:URLRequest = new URLRequest();
87 request.url=http://localhost/Web/UpLoadHandler.ashx;
88 file.upload(request);
89 }
90
91 /**
92 * 调用FileReference类的实例方法download()实现文件下载
93 * */
94 internal function onDownLoad():void
95 {
96 var request:URLRequest = new URLRequest();
97 request.url="http://localhost/Web/UpLoad/做你的爱人.mp3";
98 fileDown.download(request);
99 }
100 ]]>
101 </mx:Script>
102 </mx:Application>
103
程序运行截图:
文章来自学IT网:http://www.xueit.com/html/2009-02/21_575_00.html
文章来自学IT网:http://www.xueit.com/html/2009-02/21_575_00.html
发表评论
-
[转]Flex与ASP.NET互操作系列4:使用HttpService、URLReqeust和URLLoader加载/传输数据
2010-01-07 11:45 1431在前两篇文章中分别介绍了Flex与.NET的WebServic ... -
[转]Flex与ASP.NET互操作系列3:基于WebService的数据访问(下)
2010-01-07 11:31 1117在上一篇文章《Flex与.NET互操作(二):基于WebSer ... -
[转]Flex与ASP.NET互操作系列2:基于WebService的数据访问(上)
2010-01-07 11:05 1186Flex提供了<mx:WebService>、&l ... -
[转]Flex与ASP.NET互操作系列1:基于Socket的网络连接
2010-01-07 10:37 1278Flash/Flex也支持基于Socket ... -
Flex对图片的处理例子
2009-10-31 21:11 1446对我有一定的参考价值 ... -
FLEX翻页效果控件
2009-10-31 19:51 3906在网上看到两个不错的FLEX实现翻页效果 http:/ ... -
Flex AIR中嵌入html控件导致的null object reference错误解决
2009-02-23 12:36 4872最近做一个功能,需要在flex的AIR项目中嵌入fckedit ... -
URLLoader在firefox下有问题,不能获取外部数据
2009-02-13 13:04 1427今天在改一个flex程 ... -
一个挺酷的flash图片展示效果
2009-01-09 14:08 11235为了做一个视频列表,在网上找了一个挺酷的flash图片展示效果 ... -
AIR Express Install Badge在线安装出错及解决方法
2009-01-04 17:27 5811AIR Express Install Badge是ADO ... -
免费flash抽奖程序
2009-01-03 20:30 7281演示地址:http://www.ilinker.net.c ... -
Flex move效果不能将application命名为move.mxml
2008-12-27 14:41 1196今天要做一个图片显示效果,图片在显示的时候是快速的弹出并急停弹 ... -
tourdeflex
2008-12-24 22:19 1339该应用列举了200多个Flex实例,内容丰富,而且还提供一 ... -
Flex中如何改变图片或控件的显示层次关系
2008-12-24 15:01 5814在某种情况下我们会需要实现如下应用情景:有两个图片或者是控 ... -
<learnging Felx3>翻译:第一章 概况——第一小节 什么是Flex
2008-11-30 13:02 1099Learning Flex3 译文-------------- ... -
关于翻译<learning Flex3>这本书的想法、书的简单介绍以及下载地址
2008-11-30 12:53 1312《Learning Flex 3: Getting up to ... -
iLinker的Flex简单入门教程—Flex中类与类文件的关系
2008-11-29 21:14 1164接着上次有关Flex中类重命名操作的讨论,我们接下来看一下F ... -
iLinker的Flex简单入门教程—Flex中类的重命名操作
2008-11-28 14:33 1001Flex的ActionScript可以按 ... -
选择Flex的理由
2008-11-22 11:01 31931 Flex与Flash 也许 ...
相关推荐
Flex与.NET互操作(五):使用FileReference+HttpHandler实现文件上传/下载 一文的源码的完整工程文件,包含FLEX客户端和 ASP.NET服务端源码! 在VS2010和FLash builder4 中运行!
### Flex与.NET互操作:使用FileReference+HttpHandler实现文件上传/下载 #### 一、引言 在Flex的应用开发中,与ASP.NET、JSP、PHP等Web应用一样,经常会遇到需要处理文件上传和下载的需求。Adobe Flex是一种用于...
在这个“Flex+ASP.NET上传文件”的场景中,我们主要探讨的是如何结合这两种技术来实现文件通过HTTP协议进行上传。以下是相关的关键知识点: 1. **Flex前端开发**:在Flex中,我们可以使用FileReference类来处理文件...
本教程将重点讨论如何使用ASP.NET与Adobe Flex技术实现批量文件上传的功能。这两种技术的结合为开发人员提供了跨平台的灵活性,同时保证了前端的交互性和后端的强大处理能力。 首先,ASP.NET是微软公司推出的一种...
文件`Flex与_NET互操作 使用FileReference+HttpHandler实现文件上传-下载_Flex_脚本之家.htm`可能包含一个完整的示例代码,演示了如何在Flex中使用`FileReference`类与.NET的HttpHandler协同工作,实现文件的上传和...
总结来说,Flex与ASP.NET结合的多文件上传实例是一个综合性的实践案例,涵盖了前端与后端的协作,涉及到文件操作、网络通信、安全性和用户体验等多个方面。理解和掌握这种技术能够提升开发者在Web开发中的综合能力。
总之,Asp.net Flex 文件批量上传涉及客户端与服务器端的紧密协作,通过Flex的UI组件和Asp.net的服务器处理,可以构建出高效、用户体验良好的文件上传功能。实际开发时,还需要根据具体需求调整和优化,如增加断点续...
在提供的压缩包文件中,"说明.txt"很可能包含了实现这一功能的详细步骤和注意事项,"Flex源码"是实现多文件上传和MD5验证的Flex代码示例,而"ASP.NET上传接口"可能是服务器端处理文件上传和MD5验证的C#代码。...
5. **响应处理**:ASP.NET处理完文件后,返回一个JSON或XML响应告知Flex上传结果。Flex应用根据响应内容更新UI,显示上传成功或失败的信息。 6. **错误处理和安全性**:在整个过程中,需要考虑错误处理,比如网络...
本项目"ASP.NET源码——[上传下载]Asp.net + Flex实现网络硬盘.zip"提供了一个完整的解决方案,通过结合Asp.net技术和Adobe Flex框架,构建了一个功能强大的网络硬盘系统。以下将详细解析这个项目的重点技术和知识点...
使用ASP.NET,我们可以创建一个HTTPHandler或MVC控制器来接收上传请求。在C#代码中,`HttpPostedFileBase`类是处理上传文件的核心,它允许开发者访问上传文件的信息,如文件名、大小和内容,然后将其保存到服务器的...
在开发Web应用时,文件上传是一项常见的功能。...总的来说,实现Flex与.NET的文件上传涉及前端用户界面的构建、后端服务的编写以及服务器配置的调整,理解这些知识点将有助于你成功实现文件上传功能。
总之,Flex结合ASP.NET的文件上传涉及到前端与后端的交互,包括HTTPService的使用、文件选择与上传、XML数据的通信以及错误处理等多个环节。掌握这些知识点,可以让你构建出高效且用户体验良好的文件上传功能。
在ASP.NET环境中,结合Flash技术实现多文件上传是一种常见的解决方案,尤其在早期浏览器对HTML5支持不充分时。本文将详细解析如何通过Flash和ASP.NET相结合来实现这一功能。 首先,我们要理解Flash在多文件上传中的...
总结,Flex 文件上传下载功能提供了灵活的接口,使得开发者能够轻松地实现客户端与服务器之间的文件交互。通过优化这些操作,可以有效地减少服务器资源的消耗,提升服务器的响应速度,从而提高用户体验。在实际应用...
在与.NET互操作时,通常使用HTTPHandler作为WebService的实现方式。HTTPHandler是ASP.NET中的一种处理器,它可以处理HTTP请求并返回响应。在文件上传的场景中,HTTPHandler接收由Flex客户端发送的文件数据,将其保存...
这里我们关注的是一个使用ASP.NET技术结合Flash实现的解决方案,具体包括批量文件上传和预览功能。 ASP.NET是Microsoft开发的一个用于构建Web应用程序的框架,它提供了丰富的工具和库来简化开发过程。在ASP.NET中,...
在本资源中,我们将探讨如何在ASP.NET环境中使用Flex技术实现多文件上传功能,以及展示上传进度。 Flex是一种用于构建富互联网应用程序(RIA)的框架,它基于ActionScript和Flash Player或Adobe AIR。在ASP.NET项目...