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. 附加和addEventListener_Event.SELECTEvent.COMPLETE
  3. 调用browse()方法

在 PC 上,Event.SELECT当文件被选中时触发。 Event.COMPLETE当文件数据可用于闪存时触发。如果我选择一个 500 MB 的文件,它需要几秒钟才能Event.COMPLETE被触发。如果我在被触发之前尝试访问文件数据属性(例如读取数据流)Event.COMPLETE,我会收到空​​引用错误...

到目前为止,一切都很好...

但是,在 MAC(特别是 Safari,未测试其他浏览器)上,Event.COMPLETE不会触发。

我检查了 Adob​​e 文档,说Event.COMPLETE是在上传完成时触发。那么为什么在解析文件时它会在windows上被触发fileReference,但尚未调用上传方法......

任何人都可以帮忙吗?

这是我正在处理的代码片段:

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

1

绝对是 sdk 3.4 的错误我在这里有一个工作回合

        var fr:FileReference = e.currentTarget as FileReference;
        fr.addEventListener(Event.COMPLETE, onModelDone);
        fr.addEventListener(ProgressEvent.PROGRESS, onProgress);
//            trace("loading...");
        setTimeout(function():void {fr.load()}, 1);  // put it here for delay

我在 sdk3.9 上试过它仍然一样,所以我在这里提交了一个错误: https ://bugbase.adobe.com/index.cfm?event=bug&id=3687113

于 2013-12-20T14:44:09.383 回答
0

我似乎已经让它工作了,使用 DataEvent.UPLOAD_COMPLETE_DATA 而不是 Event.COMPLETE。

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 回答