flex 文件下载和上传

思路介绍:

一、 文件上传
上传文件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();

  1. internal function initapp():void    //这是在程序初始化时对file创建监听
  2. {
  3.     file.addeventlistener(event.select,onselected);
  4.     file.addeventlistener(event.complete,oncompleted);
  5.     file.addeventlistener(progressevent.progress,onprogress);
  6. }
  7. 或者是
  8. protected override function createchildren():void //这是在程序完成之前创建监听
  9. {
  10.     file.addeventlistener(event.select,onselected);
  11.     file.addeventlistener(event.complete,oncompleted);
  12.     file.addeventlistener(progressevent.progress,onprogress); 
  13.  }

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>

    posted on 2010-12-25 00:02  jsbrml  阅读(2169)  评论(0编辑  收藏  举报

    导航