Загрузка файла с сервера Flex на Rails 2 - PullRequest
0 голосов
/ 22 января 2009

Есть ли способ загрузить файлы из приложения Flex в серверную часть rails 2.2 при использовании хранилища файлов cookie по умолчанию?

1 Ответ

3 голосов
/ 03 июля 2009

Нет. Причина этого не в том, что Flex не передает куки при использовании FileReference # upload. Обходной путь (для Rails 2.3) - вставить пользовательский обработчик промежуточного программного обеспечения для флэш-запросов, который принимает аргументы в строке запроса и добавляет их в среду HTTP_COOKIE до того, как он достигает Rails.

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]

Затем вам нужно будет вывести сессионный ключ в какое-то представление и загрузить его, используя ExternalInterface внутри Flex:

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, который, когда POSTED to from FLEX позволяет вам хранить ваш cookie-файл для всего остального.

Честно говоря, я не помню, где я нашел эту информацию в Интернете, но я не могу взять кредит на нее. Надеюсь, это имеет смысл для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...