I heard a few times in the past about SWFUpload and recently I decided to try it out..
Basically SWFUpload is a 0x0 pixel swf that allows you to leverage Flash 8's upload mechanism through html/javascript. Not only can you let your users select multiple files to upload, it also allows you to catch the progress nicely, without a combination of nasty hacks with javascript, hidden frames and server-side callbacks.. It it distributed under the very permissive MIT license.
However, the integration went pretty bad.. SWFUpload is a very complete package and includes a big javascript wrapper, a bunch of examples and SWFObject, which is used to embed the object in the html using javascript and examples. For some reason it didn't work for me all, I assume there was probably some collision with my existing javascript.. and I don't really like SWFObject, as it has to my opinion overkill written all over it..
So, I peaked into the javascript, only to find out that just using the swf you have a lot of power already, you can specify your javascript callback functions straight from though the flashvars.. Neat! The flashvars look something like this:
<param name="FlashVars" value="uploadBackend=%2Fservices%2Fupload&uploadStartCallback=Uploader.onStart&uploadProgressCallback=Uploader.onProgress&uploadCompleteCallback=Uploader.onComplete&uploadCancelCallback=Uploader.onCancel&uploadErrorCallback=Uploader.onError&allowedFiletypes=%2A.gif%3B%2A.jpg%3B%2A.mp3&allowedFilesize=204800&uploadQueueCompleteCallback=Uploader.onQueueComplete" />
Very easy to use.. The only thing I really miss is the fact that selecting files and uploading is a combined step.. Not really handy in terms of usability..
My feature requests:
- Have a separate method for selecting files before upload.
- Allow the ability to replace the file upload list, but also append to the list.
- Have the callbacks return index numbers for the files.. Right now the only unique property you get is the filename, and there could be situations where 2 files with the same name are uploaded (rare, but still..).
- Implement a method for canceling the upload progress.
- Implement a method to remove a file from the upload queue.
The other problem I ran into using flash uploads are http cookie bugs.. I covered that in my last post.