- 浏览: 547724 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (740)
- css (4)
- jquery (8)
- javascript (23)
- html (0)
- uml (0)
- 设计模式 (1)
- 开发工具 (14)
- json (4)
- struts 1.x (3)
- spring (3)
- hibernate (6)
- struts 2.x (17)
- JFreechart (0)
- j2se (48)
- jsp (9)
- flex (22)
- 找工作 (1)
- 技术杂谈 (18)
- 网络编程 (5)
- io流 (1)
- ORACLE (15)
- 报表 (3)
- extjs (11)
- jpbm (2)
- swing (5)
- jspereports (3)
- sql (1)
- linux (15)
- ps (1)
- storm (4)
- hbase (8)
- li (0)
- python (1)
- hive (3)
- 机器学习 (1)
- hdfs (1)
- elasticsearch (1)
- hadoop 2.2 (5)
- hadoop (1)
最新评论
-
Tristan_S:
这个有点意思
ASM -
starryskydog:
程序修改detail band部分的样式 如内容字体大小 ...
使用jasperReport实现动态表头 -
samwong:
Good, so usefule
使用YUI Compressor压缩CSS/JS -
gc715409742:
能够告诉我怎么在web项目中使用YUI Compressor? ...
使用YUI Compressor压缩CSS/JS -
JsonTeye:
您好! 我看你的代码,我现在也在做动态报表,实现功能由用户自己 ...
使用jasperreport动态生成pdf,excel,html
在Flex的应用开发中,同ASP.NET,JSP,PHP等应用一样,都会有上传/下载文件的应用需求,Flex的SDK也为我们提供了专门的类FileRefUdderence实现文件上传/下载 。Flex只是作为一个客户端,要实现上传或下载必须得为其提供一个服务端来接受上传或下载的请求,本文以ASP.NET中的HttpHandler作为文件上传的服务端来完成上传功能。
OK,我们从Flex客户端开始,看看客户端是通过什么方式想服务端发起请求。Flex客户端要完成文件上传下载都是通过FileRefUdderence来实现,首先得定义一个该类型对象实例:
2 private var stateText:String = "请选择一个文件上传";
3 //通过调用file对象的方法来完成上传和下载功能
4 private var file:FileReference = new FileReference();
上传文件通常涉及到的有选择文件、上传文件以及上传完成这些最基本的处理过程。OK,下面我们就以这三个过程为例来看看Flex是怎么来完成文件的上传功能。首先为这三个功能点分别添加监听事件处理函数,在程序加载时调用:
2 {
3 file.addEventListener(Event.SELECT,onSelected);
4 file.addEventListener(Event.COMPLETE,onCompleted);
5 file.addEventListener(ProgressEvent.PROGRESS,onProgress);
6 }
另外我们也可以不用上面这中定义一个函数在程序加载时调用进行初始化操作,应用程序(mxml)的初始化操作又creationComplete方法完成,另外还有一个比它先执行的方法createChildren(),我们可以直接在mxml下重写该方法来实现应用程序的初始化,如下:
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的变量,用于显示文件上传状态提示):
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()方法就可完成该功能,详细如下代码定义:
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代码描述:
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的详细定义:
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对象的实例,并为其添加相应的事件处理函数:
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注册了成功下载文件后事件处理函数和下载过程处理函数,下面是两个方法的详细定义:
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()方法既可:
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。下面是实现上传和下载的完整代码:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 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
程序运行截图:
发表评论
-
(原创)flex(AIR)远程文件下载实例(高级版)
2012-01-12 23:36 1128<?xml version="1.0 ... -
关于Flex安全沙箱问题的解决
2012-01-12 11:10 1013关于Flex安全沙箱问题的解决 前些天做了一个 ... -
flex as自定义组件
2012-01-10 10:20 1194Flex 3入门教程: 在Act ... -
flex上传和下载文件
2012-01-09 15:45 1133FileIO 示例说明了在 Flash Player 中执 ... -
flex通信篇——flash与js
2012-01-08 16:14 1444Flex与JS交互推荐用ExternalInterface,它 ... -
[心得教程] Flex与 JS 交互通信方法
2012-01-08 16:07 1386心得教程类型: navigateToURL( ... -
Flex中的文件上传与下载
2012-01-08 14:01 1299和传统的JSP一样,在 ... -
Flex保存文件 FileReference.save(data,filename)
2012-01-08 13:14 2467一、save() 方法简介save()这个方 ... -
关于flex 4的新数据类型中英文对照
2010-08-31 08:34 965Flex 4 new data type:ArrayList ... -
Flex程序与html通信方法大全
2010-08-29 09:30 1073Flex通常作为一个web项目的一部分嵌入到一个web页中,因 ... -
flex图文混排
2010-08-29 09:29 2812由于我们项目需要在flex中实现图文混排的效果,在实现的过程中 ... -
mx:Module mx:XML mx:XMLList mx:XMLListCollection mx:Array mx:ArrayCollection比较
2010-08-23 08:38 984mx:Module 是模块化,好处是,预先不加载,用的时候才加 ... -
flex学习资料
2010-08-19 15:45 1022flex动态效果演示: http://www.efflex.o ... -
使用BlazeDS Java的数据对应表
2010-08-19 12:15 923使用BlazeDS Java的数据对应表 从Action ... -
通道端点配置1
2010-08-19 12:14 997通道端点配置 选择端点 BlazeDS提供了下列 ... -
blazeds学习笔记一整体认识
2010-08-19 12:13 1505blazeds学习笔记一整体认识 BlazeDS是一组服 ... -
后台主动推数据
2010-08-19 12:08 1219后台主动推数据 view sourceprint?1 Asyn ... -
Producer Consumer实例
2010-08-19 11:47 1300Producer Consumer实例 在上一篇文章(blaz ... -
Producer Consumer讲解
2010-08-19 11:46 1271blazeds学习笔记四Producer Consumer讲解 ... -
blazeds学习笔记
2010-08-19 11:39 1083blazeds学习笔记三Message?s ...
相关推荐
Flex与.NET互操作(五):使用FileReference+HttpHandler实现文件上传/下载 一文的源码的完整工程文件,包含FLEX客户端和 ASP.NET服务端源码! 在VS2010和FLash builder4 中运行!
### Flex与.NET互操作:使用FileReference+HttpHandler实现文件上传/下载 #### 一、引言 在Flex的应用开发中,与ASP.NET、JSP、PHP等Web应用一样,经常会遇到需要处理文件上传和下载的需求。Adobe Flex是一种用于...
文件`Flex与_NET互操作 使用FileReference+HttpHandler实现文件上传-下载_Flex_脚本之家.htm`可能包含一个完整的示例代码,演示了如何在Flex中使用`FileReference`类与.NET的HttpHandler协同工作,实现文件的上传和...
7. **安全考虑**:在实现过程中,必须注意防止文件上传攻击,如上传恶意脚本或大文件导致服务器资源耗尽。可以通过检查文件类型、大小,或者在服务器端对文件内容进行验证来增加安全性。 总的来说,"Flash+PHP多...
在本场景中,我们关注的是如何利用Flex作为前端界面与Java后端配合,实现文件的上传、下载和删除功能。这些功能在各种Web应用中非常常见,如云存储服务、在线文档编辑平台等。 **Flex** 是一种基于ActionScript和...
在Java Spring和Flex框架下实现文件上传功能是一个常见的需求,特别是在构建富互联网应用程序(RIA)时。Spring框架提供了强大的后端支持,而Flex则作为前端交互界面,为用户提供丰富的用户体验。下面将详细介绍如何...
在“多文件上传组件_Flash+ASP实现多文件上传功能”这个免费资源中,可能包含了实现这一功能的完整代码和详细说明。通常,这样的组件会包含Flash前端的ActionScript代码、ASP服务器端的处理程序代码,以及可能的配置...
为了实现多文件上传,我们需要监听FileReference的“complete”事件,每次上传完成后触发下一次上传。 Java端,通常会使用Servlet来接收并处理文件上传请求。Servlet通过HttpServletRequest对象的getParts()方法...
1. **多文件上传**:在Flex中,可以利用Flash Player的FileReference类来实现文件上传。用户可以选择一个或多个文件,然后FileReference对象将负责读取文件内容并发送到服务器。通过循环遍历FileReference列表,可以...
当我们需要在Web应用程序中实现文件上传功能时,可以利用Flex作为前端用户界面,Java Servlet作为后端处理程序。 为了实现Flex+Java Servlet的文件上传,我们需要以下步骤: 1. **事前准备**: 在开始之前,我们...
通过这种方式,Flex和.NET可以实现无缝集成,提供用户友好的文件上传和下载功能。这不仅适用于附件,还可以扩展到其他需要大量数据交换的场景,如图像、视频等多媒体内容。 总之,Flex与WebService结合使用,能够...
2. **Flash (ActionScript 3)**:在早期,由于HTML5的File API不普及,Flash常用于实现文件上传,特别是多文件选择和文件进度条的功能。AS3提供了`FileReference`类,支持用户选择多个文件,并通过`upload()`方法...
实现这个功能的关键在于使用Flash的`FileReference`类,它可以监控文件上传的进度,并通过`upload`方法将数据发送到服务器。同时,Flash需要与PHP进行Ajax通信,通常是通过XMLSocket或者XMLHttpRequest(XHR)来实现...
在本文中,我们将深入探讨如何实现一个Flex与Java Servlet结合的文件上传实例。这个实例将指导你通过Adobe Flex客户端向服务器端的Java Servlet发送文件,使用Apache Commons FileUpload库处理文件上传过程。 首先...
在文件上传中,我们可以利用Flash的FileReference类来实现文件的选择和上传,并且通过ActionScript(Flash的编程语言)来显示上传进度条。 具体步骤如下: 1. **创建Flash组件**:使用Flash CS(可能是Flash ...
在Flash中,你可以编写ActionScript代码来处理文件选择事件,获取用户选择的文件,并通过Flash的FileReference类进行上传。 2. **与ASP.NET交互**:Flash组件需要与服务器端的ASP.NET应用程序通信。你可以定义一个...
它使用Flash的FileReference类来实现这个功能,FileReference提供了选择文件、读取文件内容以及上传文件的方法。 再者,FancyUpload还提供了进度条显示,让用户能清晰看到每个文件的上传进度,增强了交互性。在...
【标题】"Flash + Servlet 实现多文件上传" 在Web开发中,文件上传是一个常见的功能,尤其是当用户需要上传多个文件时。本示例通过结合Flash技术和Servlet来实现这一功能,利用AS3.0(ActionScript 3.0)作为Flash...
标题中的“Flash实现的多文件上传”指的是使用Adobe Flash技术来实现用户在Web页面上同时上传多个文件的功能。Flash在过去的网页开发中被广泛应用于多媒体交互和富互联网应用(RIA),其中包括文件上传功能,因为它...