2013-05-07 82 views
0

我設計了一個p2p apliccation,可以在沒有服務器的情況下傳輸文件。一切正常。我可以在同伴之間傳輸文件。但事實證明,如果文件大小大於16mb(因爲我可以傳輸的最大文件大小爲15810kb),它不會轉移到同行。這是我使用的代碼:actionscript 3.0 - p2p文件共享問題(最大上傳文件大小)

  private function browseFile(farIds:String = ""):void { 
      fIds = farIds; 
      file = new FileReference(); 
      file.addEventListener(Event.SELECT, selectHandler); 
      file.browse(); 
     } 

     private function selectHandler(event:Event):void { 
      var btn = getChild("browseFile_" + fIds) 
      if (btn && btn.alpha) btn.alpha = 0.5; 
      file = FileReference(event.target); 
      file.addEventListener(ProgressEvent.PROGRESS, progressHandler); 
      file.addEventListener(Event.COMPLETE, completeHandler); 
      file.load(); 
     } 

     private function progressHandler(event:ProgressEvent):void{ 
      ExternalInterface.call("fileLoadProgress", event.target.name, event.bytesTotal, event.bytesLoaded) 
     } 

     private function completeHandler(event:Event):void{ 
      ExternalInterface.call("onFileLoaded") 
      var fileData:Object = new Object(); 
      fileData.file = event.target.data 
      fileData.name = event.target.name; 
      var btn = getChild("browseFile_" + fIds) 
      if (btn && btn.alpha) btn.alpha = 1; 
      sendSomeData(fileData, fIds, "receiveFile"); 
     } 

     public function receiveFile(info:Object, peerID:String):void{ 
      ExternalInterface.call("alert", "receivedFile") 
     } 

     private function sendSomeData(data,farIds:String,func:String = "receiveSomeData"):void{ 
      for(var id:String in sendStreams){ 
       sendStreams[id].send(func, data, myPeerID); 
      } 
     } 

你能告訴我如何允許我傳輸任何大小的文件嗎?

感謝您的幫助!

回答

1

您可以將文件分成8KB等塊,然後逐個發送。但是,您必須檢查收到的組塊的順序以及途中可能出現的任何損失。

+0

是的,它似乎是解決問題的唯一方法,但我怎樣才能拆分文件,我怎樣才能加入它的部分? – SuperYegorius 2013-05-08 22:55:05

+1

您可以使用'ByteArray'完成所有工作:將'Object'轉換爲'ByteArray'(使用'ByteArray.writeObject'),分成幾個ByteArray並將它們連接回一個ByteArray(使用ByteArrat。 readBytes'和'ByteArray.writeBytes'),然後將結果解碼成一個Object(使用'ByteArray.readObject')。 – 2013-05-08 23:47:34