0

fileReferenceを使用していますが、MAC上のSafariでの実行に問題があります...

編集: 以下の例は、MAC上のSafariでも機能しません...

http://www.permadi.com/blog/2010/06/flash-as3-using-filereference-to-load-files-example-for-flash-cs4-and-above/

PCのワークフローは次のように実行されます。

  1. ファイル参照を作成する
  2. に添付addEventListenerEvent.SELECTEvent.COMPLETE
  3. browse()メソッド を呼び出す

PCではEvent.SELECT、ファイルが選択されたときに発生します。 Event.COMPLETEファイルデータがフラッシュできるようになると発生します。500 MBのファイルを選択すると、起動されるまでに数秒かかりますEvent.COMPLETE。起動される前にファイルデータプロパティ(データストリームの読み取りなど)にアクセスしようとすると、Event.COMPLETEnull参照エラーが発生します...

ここまでは順調ですね...

ただし、MAC(具体的にはSafari、他のブラウザではテストされていません)では、Event.COMPLETEは起動されません。

Event.COMPLETEアップロードが完了すると起動されるというAdobeのドキュメントを確認しました。では、fileReferenceがファイルを解析したのに、uploadメソッドがまだ呼び出されていないのに、なぜWindowsで起動されるのでしょうか...

誰か助けてもらえますか?

これが私が取り組んでいるコードの抜粋です:

public function browseFile(target:Object):void 
{
   var imagesFilter:FileFilter = new FileFilter("Allowed files", "*.jpg;*.bmp;*.flv;");
   fileReference.browse([imagesFilter]);
   fileReference.addEventListener(Event.SELECT, fileSelect); 
   fileReference.addEventListener(Event.COMPLETE, fileSelectComplete); 
}  


private function fileSelect(event:Event):void 
{    
   // update label - IMPORTANT for large files as there's a delay while flash parses file, before control is handed back to this script...
   setStatusLabel("...loading file");

   var fileReference:FileReference = event.target as FileReference; 

   fileReference.addEventListener(Event.COMPLETE, fileSelectComplete); 


   // load the file into the fileReference object
   fileReference.load();  

} 


  // Called when upload file has been processed by flash (a few secs for large files, or fileRef.data is null...)
private function fileSelectComplete(event:Event):void 
{
   var fileReference:FileReference=event.target as FileReference; 

   trace("ready to do things - but not fired on Safari on a MAC ");
}
4

2 に答える 2

0

Event.COMPLETE の代わりに DataEvent.UPLOAD_COMPLETE_DATA を使用して、動作しているようです。

var fileRef:FileReference = new FileReference();
fileRef.addEventListener(Event.SELECT, onFileSelected);
fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, onUploadComplete);

function onFileSelected(event:Event):void {
    statusBar.text = "File upload started";
    fileRef.upload(FILE_UPLOAD_URL);
};

function onUploadComplete(event:Event):void {
    statusBar.text = "File upload completed";
};
于 2010-08-12T12:49:16.097 に答える