【问题标题】:File Upload from Flex to Rails 2 server文件从 Flex 上传到 Rails 2 服务器
【发布时间】:2010-10-02 23:53:57
【问题描述】:

在使用默认的 Cookie 会话存储时,有什么方法可以将文件从 flex 应用程序上传到 rails 2.2 后端?

【问题讨论】:

    标签: ruby-on-rails apache-flex session upload


    【解决方案1】:

    没有。它不起作用的原因是 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 存储。

    老实说,我不记得我是在哪里在网上找到这些信息的,但我不能把它归功于它。希望它对你有意义。

    【讨论】:

    • 我刚刚意识到您专门将 Rails 2.2 放在了主题中。对此感到抱歉。
    猜你喜欢
    • 2019-06-24
    • 2011-02-12
    • 2021-12-06
    • 2011-05-23
    • 1970-01-01
    • 2016-10-15
    • 2017-06-05
    • 2017-07-04
    • 1970-01-01
    相关资源
    最近更新 更多