Or SWFUpload and attachment_fu. SWFUpload does have some caveats you need to overcome and I should start a blog and write a post on it. Basically it comes down to overcoming Rails 2’s security measures without disabling them and it’s perfectly possible. There are some posts around that deal with it, but they all have their flaws. I’ll just post some relevant sections of my code in here so everyone at least has a reference to go by (it should be indexed by google).
Make a file “swf_session.rb” in config/initializers/ with http://pastie.org/244830 as the contents (this is a slightly modified version of the original author code)
:cache => "swfupload")
Add this in the section of your layout:
file_post_name : "document[uploaded_data]" is the name of the model instance and field you want to post to (@document.uploaded_data), attachment_fu automatically handles this field.
- Expose the relevant controller actions (the ones that handle the uploads) so the session can be passed in as a POST variable:
class DocumentsController < ApplicationController
session :cookie_only => false, :only => :create
... <create new document code here>
- Add the mime-types gem to config/environment.rb as a requirement:
config.gem “mime-types”, :lib => “mime/types”, :version => ‘>= 1’
- Patch the attachment_fu plugin a little: vendor/plugins/attachment_fu/lib/technoweenie/attachment.fu.rb: http://pastie.org/244854
This is just to make your life easier and let attachment_fu do its magic without you having to worry about setting the content_type.
Implementing SWFUpload can be quite an adventure and you really need to understand what’s going on, but the result is the best “ajax” upload you can imagine.