环境:ruby 1.8.7 + rails 2.3.5 + swfupload
swfupload 上传文件很方便,支持多文件上传,但是在往往需要做知道这张图片是谁传的,这样就需要取当前登录的session,这样就会出现问题,
因为图片是通过flash传上来的,swfupload里的session和rails里的session不是同一个,理论上属于跨域问题了,所以rails取不到session值,所以必须解决session问题,网络上大家一般都是通过修改session来解决的,即吧session的参数从swfupload里给从传到后台,方可验证通过,eg: http://huacnlee.com/blog/rails-multi-files-upload-with-swfupload
我是通过关闭session,通过参数来验证的,例如传login名字,得到当前是哪个用户:
controller:
class CkeditorController < ApplicationController skip_before_filter :verify_authenticity_token, :only => [:create] session :off , :only => [:create] def create @record.user ||= User.find_by_login(params[:login]) end end
view 页面上:注意中文注释部分
<script>
window.onload = function() {
upload1 = new SWFUpload({
// Backend Settings
upload_url: "/ckeditor/create",
post_params: {"login" : <%= current_user.login %>,"dir":dir}, // 这里很重要
// File Upload Settings
file_size_limit : "102400", // 100MB
file_types : "*.*",
file_types_description : "All Files",
file_upload_limit : 100,
file_queue_limit : 0,
// Event Handler Settings (all my handlers are in the Handler.js file)
swfupload_preload_handler : preLoad,
swfupload_load_failed_handler : loadFailed,
file_dialog_start_handler : fileDialogStart,
file_queued_handler : fileQueued,
file_queue_error_handler : fileQueueError,
file_dialog_complete_handler : fileDialogComplete,
upload_start_handler : uploadStart,
upload_progress_handler : uploadProgress,
upload_error_handler : uploadError,
upload_success_handler : uploadSuccess,
upload_complete_handler : uploadComplete,
// Button Settings
button_image_url : "/images/XPButtonUploadText_61x22.png",
button_placeholder_id : "spanButtonPlaceholder1",
button_width: 61,
button_height: 22,
// Flash Settings
flash_url : "/javascripts/swfupload/swfupload.swf",
flash9_url : "/javascripts/swfupload/swfupload_fp9.swf",
custom_settings : {
progressTarget : "fsUploadProgress1",
cancelButtonId : "btnCancel1"
},
// Debug Settings
debug: false
});
}
</script>