flash+asp.net上传文件,显示进度条

     最近由于项目的需求,对flash做了一番研究,并结合Asp.net实现RIA开发。以下是用flash作为客户端(文件上传),通过asp.net作为服务器端(实现文件接收)的一个实例:
      一、客户端基本实现流程:
      1、flash设计界面如下图(1)所示:
         
                                                图(1)
      2、flash运行界面如下图(2)所示:
      
                                                图(2)
      3、在flash中单击“浏览”按钮,弹出以下对话框(图(3)),然后选将要上传的文件;
      
                                                图(3)
      4、选择好要上传的文件然后点击打开;(比如我选择guizu.wmv)图(4):
      

                                                图(4)
      5、然后点击上传,接着执行上传过程(图(5)):
      
                                                图(5)
      二、flash核心代码如下:
      import flash.net.FileReference;
      import flash.net.FileReferenceList;
      
      var fileRefList:FileReferenceList = new FileReferenceList();
      var totalBytes:Number = 0;
      var uploadedBytes:Number = 0;
      var uploadedBytes2:Array;
      var filesCompleted:Number = 0;
      var totalFiles:Number = 0;
      var fileRefListener:Object = new Object();
      
      var allTypes:Array = new Array();
      var videoTypes:Object = new Object();
      videoTypes.description = "视频文件(*.wmv; *.asf; *.avi; *.mpg; *.3pg;*.mov)";
      videoTypes.extension = "*.wmv; *.asf; *.avi; *.mpg; *.3pg;*.mov";
      allTypes.push(videoTypes);
      
      uploadBtn.enabled = false;
      _root.progressBar.visible = false;
      
      
      function rePaintProBar (pb, xCor, yCor) {
       _root.destroyObject(pb);
       _root.createObject("ProgressBar",pb,0);
          _root.progressBar.move(xCor,yCor);
       _root.progressBar.label = "正在上传 %3%% ";
       _root.progressBar.labelPlacement = "right";
       _root.progressBar._width = 359;
      }
      
      fileRefListener.onSelect = function (fileRefList:FileReferenceList):Void {
       uploadBtn.enabled = true;
       rePaintProBar("progressBar", 109.0, 41.0);
       var list:Array = fileRefList.fileList;
          var fileRef:FileReference;
       totalBytes = 0;
          for(var i:Number = 0; i < list.length; i++) {
              fileRef = list[i];
        totalBytes += fileRef.size;
       txtFilePath.text = fileRef.name;
          }
      }
      
      fileRefListener.onCancel = function (fileRef:FileReference):Void {
       uploadBtn.enabled = false;
      }
      
      fileRefListener.onOpen = function (fileRef:FileReference):Void { 
       txt_FilePath.label = fileRef.name;
      }
      
      fileRefListener.onProgress = function (fileRef:FileReference, bytesLoaded:Number, bytesTotal:Number):Void {
       progressBar.mode = "manual";
       var temp:Number = bytesLoaded - uploadedBytes2[fileRef.name]
       uploadedBytes2[fileRef.name] = bytesLoaded;
       uploadedBytes += temp;
       progressBar.setProgress(uploadedBytes, totalBytes);
       txtUploaded.text = GetSizeType(uploadedBytes);
       txtTotal.text = GetSizeType(totalBytes);
      
      }
      
      fileRefListener.onComplete = function (fileRef:FileReference):Void {
       filesCompleted++;
       if(filesCompleted == totalFiles)
        FinishedUpload();
      }
      
      fileRefListener.onHTTPError = function(fileRef:FileReference):Void {
       trace("onHTTPError:"+ fileRef.name);
      }
      
      fileRefListener.onIOError = function(fileRef:FileReference):Void {
          trace("onIOError: " + fileRef.name);
      
      }
      
      fileRefListener.onSecurityError = function(fileRef:FileReference, errorString:String):Void {
          trace("onSecurityError: " + fileRef.name + " errorString: " + errorString);
      }
      
      fileRefList.addListener(fileRefListener);
      
      browseButn.clickHandler = function () {
       fileRefList.browse(allTypes);
      }
      
      uploadBtn.clickHandler = function () {
       var list:Array = fileRefList.fileList;
       var fileRef:FileReference;
       if(uploadBtn.label == "上传")
       {   
        browseBtn.enabled = false;
        uploadBtn.label = "取消";
        totalFiles = list.length;
        filesCompleted = 0;
        uploadedBytes = 0;
        uploadedBytes2 = [];
        txtUploadNum.text = "已上传:";
        txtFileTotal.text = "文件大小:";
        for(var i:Number = 0; i < list.length; i++) {
         fileRef = list[i];
         fileRef.addListener(fileRefListener);
         uploadedBytes2[fileRef.name] = 0;
         if(uploadPage != undefined)
          fileRef.upload(uploadPage);
        }
       }
       else
       {  
        for(var i:Number = 0; i < list.length; i++) {
         fileRef = list[i];
         fileRef.cancel();
        }
        uploadBtn.label = "上传";
        browseBtn.enabled = true;
       }
      }
      
      function FinishedUpload()
      {
       uploadBtn.enabled = false;
       uploadBtn.label = "上传";
       browseBtn.enabled = true;
       if(completeFunction != undefined)
       {
        getURL('javascript:' + completeFunction);
       }
      }
      
      function GetSizeType(size:Number)
      {
       if(size < 1024)
        return int(size*100)/100 + " bytes";
       if(size < 1048576)
        return int((size / 1024)*100)/100 + "KB";
       if(size < 1073741824)
          return int((size / 1048576)*100)/100 + "MB";
        return int((size / 1073741824)*100)/100 + "GB";
      }

      三、服务器端Asp.net实现核心代码如下:
       using System;
       using System.Data;
       using System.Configuration;
       using System.Collections;
       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 Upload : System.Web.UI.Page
       {
           protected void Page_Load(object sender, EventArgs e)
           {
               string saveToFolder = "Upload";
               HttpFileCollection uploadedFiles = Request.Files;
               string Path = Server.MapPath(saveToFolder);
               for (int i = 0; i < uploadedFiles.Count; i++)
               {
                   HttpPostedFile F = uploadedFiles[i];
                   if (uploadedFiles[i] != null && F.ContentLength > 0)
                   {
                       string newName = F.FileName.Substring(F.FileName.LastIndexOf("//") + 1);
                       F.SaveAs(Path + "/" + newName);
                   }
               }
           }

       本实例目前还只实现了文件上传功能,还未对文件种种业务需求的判断与处理以及文件上传后的数据处理等等,待今后在项目中具体扩充......

 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值