我正在使用 fileReference,但是我在 MAC 上的 Safari 上运行时遇到问题...
编辑: 下面的示例也不适用于 MAC 上的 Safari ......
PC 上的工作流程是这样运行的:
- 创建文件引用
- 附加和
addEventListener
_Event.SELECT
Event.COMPLETE
- 调用
browse()
方法
在 PC 上,Event.SELECT
当文件被选中时触发。
Event.COMPLETE
当文件数据可用于闪存时触发。如果我选择一个 500 MB 的文件,它需要几秒钟才能Event.COMPLETE
被触发。如果我在被触发之前尝试访问文件数据属性(例如读取数据流)Event.COMPLETE
,我会收到空引用错误...
到目前为止,一切都很好...
但是,在 MAC(特别是 Safari,未测试其他浏览器)上,Event.COMPLETE
不会触发。
我检查了 Adobe 文档,说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 ");
}