思路介绍:
 
一、 文件上传
 上传文件flex端处理:
 1、上传文件第一步——打开文件。
 首先需要创建一个FileReference对象:
 private var myFileReference:FileReference = new FileReference();
 在FileReference中有一个browse()函数,这个函数的作用就是打开一个windows文件选择框,可以选择需要上传的文件。在打开的文件选择框中可以指定选择文件的类型,这是通过FileFilter来实现的。创建一个FileFilter对象,作为browse函数的参数,这样就可以指定选择文件的类型了:
 var imagesFilter:FileFilter = new FileFilter("Images(*.jpg,*.gif,*.png)","*.jpg;*.gif;*.png");
 myFileReference.browse([imagesFilter]);
 2、上传文件第二步——上传文件
 文件选择了之后会触发Event.SELECT事件,所以需要在myFileReference对象上注册SELECT事件的监听:
 myFileReference.addEventListener(Event.SELECT,onSelect);
 onSelect是一个监听函数,在这个函数中可以得到选择的文件的名字。由于安全沙箱的原因,只能得到选择的文件名,不能得到完整的文件路径。选择了需要上传的文件后,需要调用upload()函数上传选择的文件:
 myFileReference.upload(uploadURL,myFileReference.name);
 upload的参数uploadURL是一个URLRequest对象,这个对象指定了上传文件用的URL,myFileReference.name就是选择的文件的文件名。
 3、上传文件第三步——上传进度
 一般情况下,在上传文件的过程中需要显示一个表示上传进度的进度条,这样可以有一个很好的用户体验。要想显示上传进度,可以有两种方式。第一种就是监听FileReference对象的process事件,在process事件的监听函数中可以得到上传的进度,然后可以设置进度条的进度。第二种方式就是把FileReference对象与进度条对象进行绑定,进度条会自动监听FileReference对象的process事件,来显示上传进度。
 4、上传文件第四步——上传结束
 有的时候需要在文件上传结束后给用户一个提示,告诉用户文件已经上传结束了。这就必须得对FileReference对象的COMPLETE事件进?......
 
1文件下载:
 
var file=new FileReference();
 
?? var downloadURL:URLRequest=new URLRequest("http://10.1.31.36/data/"+1.zip");//对应服务器上的文件路径,要发布哦。
 ???configureListeners(file);?? //添加下载过程中的监听信息
 ???file.download(downloadURL);
 
?
 
private function configureListeners(dispatcher:IEventDispatcher):void 
 ??{
 ??????????? dispatcher.addEventListener(Event.CANCEL,cancelHandler);
 ??????????? dispatcher.addEventListener(Event.COMPLETE,completeHandler);
 ??????????? dispatcher.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
 ??????????? dispatcher.addEventListener(Event.OPEN,openHandler);
 ??????????? dispatcher.addEventListener(ProgressEvent.PROGRESS,progressHandler);
 ??????????? dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);
 ??????????? dispatcher.addEventListener(Event.SELECT,selectHandler);
 }
 
?
 
?
 
2,文件的上传
 
?
 
var file:FileReference = new FileReference();
 
- internal function initapp():void??? //这是在程序初始化时对file创建监听 
  
 - { 
  
 - ? ? file.addeventlistener(event.select,onselected); 
  
 - ? ? file.addeventlistener(event.complete,oncompleted); 
  
 - ? ? file.addeventlistener(progressevent.progress,onprogress); 
  
 - } 
  
 - 或者是 
  
 - protected override function createchildren():void //这是在程序完成之前创建监听 
  
 - { 
  
 - ? ? file.addeventlistener(event.select,onprogress);? 
  
 - ?} 
  
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) + "%"; 
 } 
 
//响应上传事件!
 
添加 file.brower()响应事件触发文件选择。
 
internal function onupload():void  
{  
? ???if(file.size > 0)  
? ???{  
? ?? ?? ?statetext = "正在上传文件:" + file.name;  
? ???}  
? ? var request:urlrequest = new urlrequest();  
? ? request.url="ttp://localhost/web/uploadhandler.aspx"//这里以调用asp.net 脚本服务为例说明  
? ? file.upload(request); ?
 脚本如下:将其发布到iis上或tomcat上,访问路径就是上面的地址
 在.net 上创建一个网站
 using System;
 using System.Data;
 using System.Configuration;
 using System.Web;
 using System.Web.Security;
 using System.Web.UI;
 using System.Web.UI.WebControls;
 using System.Web.UI.WebControls.WebParts;
 using System.Web.UI.HtmlControls;
 public partial class _Default : System.Web.UI.Page 
 {
 ??? protected void Page_Load(object sender,EventArgs e)
 ????? {
 ????????? string uploadFolder = "upload"; // 上传文件夹
 ?
 ????????? HttpFileCollection files = Request.Files;
 ? 
 ????????? if (files.Count == 0)
 ????????? {
 ???????????? Response.Write("请勿直接访问本文件");
 ????????????? Response.End();
 ????????? }
 ? 
 ????????? string path = Server.MapPath(uploadFolder);
 ? 
 ????????? // 只取第 1 个文件
 ????????? HttpPostedFile file = files[0];
 ? 
 ????????? if (file != null && file.ContentLength > 0)
 ????????? {
 ????????????? // flash 会自动发送文件名到 Request.Form["fileName"]
 ????????????? string savePath = path + "/" + Request.Form["fileName"];
 ????????????? file.SaveAs(savePath);
 ????????? }
 ????? }
 }
 控制上传文件大小和上传时间需要在配置文件上添加以下节点
 <system.web>
 ????? ??<httpRuntime maxRequestLength="409600" executionTimeout="10000" />
 </system.web>