使用默认的 Cookie 会话存储时,有什么方法可以将文件从 flex 应用程序上传到 rails 2.2 后端?
John Duff
问问题
1168 次
1 回答
3
不,它不起作用的原因是 Flex 在使用 FileReference#upload 时不传输 cookie。一种解决方法(对于 Rails 2.3)是为 flash 请求插入一个自定义中间件处理程序,该处理程序接受查询字符串中的参数,并在到达 Rails 之前将它们添加到 HTTP_COOKIE 环境。
require 'rack/utils'
class FlashSessionCookieMiddleware
def initialize(app, session_key = '_session_id')
@app = app
@session_key = session_key
end
def call(env)
if env['HTTP_USER_AGENT'] =~ /^(Adobe|Shockwave) Flash/
params = ::Rack::Utils.parse_query(env['QUERY_STRING'])
env['HTTP_COOKIE'] = [ @session_key, params[@session_key] ].join('=').freeze unless params[@session_key].nil?
end
@app.call(env)
end
end
确保文件在您的加载路径中并将其添加到您的 session_store.rb:
ActionController::Dispatcher.middleware.use FlashSessionCookieMiddleware, ActionController::Base.session_options[:key]
然后您需要将会话密钥输出到某处的视图并使用 Flex 内部的 ExternalInterface 加载它:
def upload_path_with_session_information
session_key = ActionController::Base.session_options[:key]
uploads_path(session_key => cookies[session_key], request_forgery_protection_token => form_authenticity_token)
end
如您所见,我有一个名为 uploads 的资源,我使用upload_path_with_session_information
帮助程序给我一个不错的 URL,当从 FLEX 发布到该 URL 时,您可以为其他所有内容保留 cookie 存储。
老实说,我不记得我是在哪里在线找到这些信息的,但我不能把它归功于它。希望它对你有意义。
于 2009-07-02T23:35:47.490 回答