views:

283

answers:

1

Hi,

I am working with a fileReference, however I'm having issues running on Safari on a MAC...

EDIT

The below example also doesnt work on Safari on a MAC...

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

#

The workflow on a PC runs as such:

1) Create file reference
2) attach addEventListener's for Event.SELECT and Event.COMPLETE
3) call the browse() method

On a PC, Event.SELECT is fired when a file has been selected. Event.COMPLETE is fired when the file data is available to flash. If I select an 500meg file, it takes a few seconds before Event.COMPLETE is fired. If I attempt to access the file data properties (such as reading the data stream) before Event.COMPLETE is fired, I receive null reference errors...

So far so good.

However, on a MAC (speficially Safari, not tested other browsers), the Event.COMPLETE is not fired.

I have checked the Adobe docs, which say Event.COMPLETE is fired when the upload is completed. So why does it get fired on windows when the fileReference has parsed the file, but the upload method has not yet been called...

Can anyone help?

Here's snippets of the code I am working on:

   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 ");
  }
A: 

I seem to have gotten it working, using DataEvent.UPLOAD_COMPLETE_DATA instead of 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";
};
starkos
Fantastic! I'll run the change and get back to you -sorry it's been so long!
jobbie jones