0

デフォルトのCookieセッションストアを使用している場合、flexアプリからrails 2.2バックエンドにファイルをアップロードする方法はありますか?

4

1 に答える 1

3

いいえ。機能しない理由は、FileReference#upload を使用するときに Flex が Cookie を送信しないためです。回避策 (Rails 2.3 の場合) は、フラッシュ リクエスト用のカスタム ミドルウェア ハンドラを挿入して、クエリ文字列で引数を取得し、それらを 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 を提供しています。この URL を FLEX から POSTED すると、他のすべての Cookie ストアを保持できます。

正直なところ、この情報をオンラインで見つけた場所は覚えていませんが、信用できません。それがあなたにとって理にかなっていることを願っています。

于 2009-07-02T23:35:47.490 に答える