swfupload 利用 flash 作 ajax 式后台文件上传, 提供强大事件订阅机制。不幸的是 flash 的上传文件时不支持 cookie 发送,因此在有验证需要的场景会发生 session 丢失,而通常文件上传这块是需要权限校验的。
插件干的事比较简单,主要对 rails 的 cookiestore 进行 hacking, 使其可以接受由 querystring 传过来的 session_id。有需要的朋友可以通过 github 安装
安装了git:
ruby script/plugin install git://github.com/klesh/klesh_swfupload.git
没有 git 则直接点 download ,下载后解压到 vendor/plugins
完成后把 vendor/plugins/klesh_swfupload javascripts 和 swfs 文件 copy 到 public 目录
在 controller 中把接收文件的 action 设置 cookie_only 为 false
session :cookie_only => false, :only => :ACTION_FOR_RECEIVING_FILES
def ACTION_FOR_RECEIVING_FILES
uploaded_file_name = params[:Filename]
uploaded_file = params[:Filedata]
end
view 里面:
<%= javascript_include_tag 'swfupload' %>
...
...
<%= swfupload 'swfuploader', {:action => :ACTION_FOR_RECEIVING_FILES}, {:button_text => 'Upload', :button_width => 60,
:button_height => 20, :upload_success_handler => "function(file, response){alert(response);}"} %>
swfupload 第一个参数指定客户端 javascript 实例名,第二个指定接收文件 action 的 url, 第三个则是 swfupload 客户端的参数,具体参数设置可参考 swfupload.org 或 vendor/plugins/klesh_swfuplpad/docs/swfupload.html