2013-08-01 24 views
0

我寫此代碼文件上傳到服務器的用戶閃存,它發送文件到服務器,但它表明沒有任何進展,Flash上​​傳陸侃不表明

var _var1:String= ''; 

      var globalParam = LoaderInfo(this.root.loaderInfo).parameters; 
      for (var element:String in globalParam) { 
      if (element == 'host'){ 
      _var1 = globalParam[element]; 
       } 
      } 


      if(_var1 != '') 
      { 
       var req:URLRequest = new URLRequest(_var1); 
       req.contentType = 'application/octet-stream'; 
       req.method = URLRequestMethod.POST; 
       req.data = recorder.output; 




       var loader:URLLoader = new URLLoader(req); 
       // set progress 
       loader.addEventListener(ProgressEvent.PROGRESS , fileUploadProgress); 

       // set on complete 
       loader.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA , fileUploadComplete); 

       // set on error handler 
       loader.addEventListener(IOErrorEvent.IO_ERROR , fileUploadIOError); 

       // set on security error handler 
       loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR , fileUploadSecurityHandler); 

       // set on open 
       loader.addEventListener(Event.OPEN , fileUploadOpenHandler); 

       //ExternalInterface.call("$.jRecorder.callback_upload_progress_change" , String(0)); 
       function fileUploadProgress(event:ProgressEvent):void{ 
        var bytesTotal:uint = event.bytesTotal; 
        var bytesLoaded:uint = event.bytesLoaded; 
        var pctDone:Number = (bytesLoaded/bytesTotal) * 100; 
        ExternalInterface.call("$.jRecorder.callback_upload_progress_change" , String(pctDone)); 
        //trace(bytesLoaded+ "/"+bytesTotal); 
       } 


       // On open 
       function fileUploadOpenHandler(event:Event):void{ 

        ExternalInterface.call("$.jRecorder.callback_upload_started"); 
       } 

       function fileUploadComplete(event:DataEvent):void{ 

        ExternalInterface.call("$.jRecorder.callback_upload_finished" , String(event.currentTarget.size));; 
       } 


       function fileUploadSecurityHandler(event:SecurityErrorEvent):void{ 
        ExternalInterface.call("$.jRecorder.callback_upload_securityproblem" , String(event.text));; 
       } 


       function fileUploadIOError(event:IOErrorEvent):void{ 
        ExternalInterface.call("$.jRecorder.callback_upload_ioproblem" , String(event.text));; 
       } 
      } 

時上傳的文件開始,fileOpenHandler達到,並在結束後,我得到'無窮'進展中,我無法取得任何進展或完整的地方,我的代碼的問題?

+0

您是否在'trace'函數中獲得了進展? – putvande

+0

是的,就像在javascript中顯示的東西一樣 – Ata

回答

-1

您無法使用URLLoader獲取進度事件。文檔http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLLoader.html#event:progress提到了這一點。如果你想接收進度事件,你必須使用另一種方法來發送數據(雖然我不知道可能是什麼)。

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.ProgressEvent; 
    import flash.net.URLLoader; 
    import flash.net.URLRequest; 
    import flash.net.URLRequestMethod; 

    public class URLLoaderProgress extends Sprite 
    { 
     public function URLLoaderProgress() 
     { 
      var loader:URLLoader; 
      var request:URLRequest; 
      var data:String; 

      request = new URLRequest("http://example.com"); 
      request.contentType = "application/octet-stream"; 
      request.method = URLRequestMethod.POST; 
      for (var i:int = 0; i < 10; i++) 
      { 
       data += "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"; 
      } 

      loader = new URLLoader(request); 
      loader.addEventListener(ProgressEvent.PROGRESS, function (e:ProgressEvent):void 
      { 
       trace(e.bytesLoaded); 
      }); 

      loader.addEventListener(Event.COMPLETE, function (e:Event):void 
      { 
       trace("complete"); 
      }); 
     } 
    } 
} 
+0

這是不正確的。你不能訪問數據,但它確實會給你帶來進步。 – putvande

+0

以一個準系統示例更新了答案。無論數據量多少,只有一個進度事件被觸發,並且在整個事件之前。 –

+0

你的代碼與我的區別在哪裏? – Ata