Приложение Rails 3 / октет-поток

#ruby-on-rails #ruby-on-rails-3

#ruby-on-rails #ruby-on-rails-3

Вопрос:

Я работаю над приложением, в котором я использую paperclip для загрузки изображений, затем изображение обрабатывается во флэш-приложении и возвращается в мое приложение с помощью application / octet-stream. Проблема в том, что параметры из flash недоступны с помощью params. Я видел примеры, где что-то вроде

 File.open(..,..) {|f| f.write(request.body) }
  

но когда я это делаю, файл каким-то образом повреждается.

Как я могу справиться с этим в rails 3?

Комментарии:

1. Как отображаются параметры в вашем журнале, когда flash обменивается данными с вашим приложением? Просто ли flash изменяет какой-либо параметр вашей формы?

2. я вижу что-то вроде id = 1 amp;png =… выглядит нормально, но параметры [:png] пусты

3. Это в журнале веб-сервера или в журнале сервера Rails?

4. журнал веб-сервера — я видел это в firebug (или каком-то другом http-мониторе, я не помню)

5. Я использовал http fox для мониторинга этого, когда я просматриваю данные post, я вижу параметры, как и следовало ожидать, но params[] пуст

Ответ №1:

После того, как вы убедитесь, что параметры запроса попали в приложение Rails, вы можете захотеть убедиться, что проблем с синтаксическим анализом не было. Попробуйте добавить эти строки в действие вашего контроллера:

 def update # (or whatever)
  logger.debug "params: #{params.inspect}"
  # I hope you do not test this using very large files ;)
  logger.debug "request.raw_post: #{request.raw_post.inspect}"
  # ...
end
  

Может быть, имена переменных каким-то образом изменились? Может быть, что-то слишком часто выходило из строки параметра один раз?

Кроме того, вы сказали, что файл, в который вы хотите сохранить request body , поврежден. Как именно?

Запрос.объект body не обязательно должен быть строковым. Например, это может быть StringIO, поэтому вы можете захотеть ввести это:

 File.open(..,..) {|f| f.write(request.body.read) }