rails 3, heroku, aws-s3, просто пытаюсь загрузить файл в S3, который отправляется (http / multipart) в наше приложение - PullRequest
0 голосов
/ 16 февраля 2011

Наше приложение размещено в Heroku, поэтому нет локального хранилища файлов.

Используемый нами сторонний API не сохраняет созданный им WAV, он помещает файл (http / multi-part)вернуться к нашему приложению.Они предоставляют пример кода, чтобы «просто» отправить этот файл на S3.Код, который они предоставляют (ниже), не работает на Rails 3 + Heroku.Я подозреваю, что есть некоторый другой синтаксис для указания входного файла и временного файла, из которого мы читаем.(Код изначально был для Синатры. Я понятия не имею, для чего были старые [:filename] и [:tempfile], поэтому я удалил их и предположил, что синтаксис был примерно таким же, используя Tempfile?)

  def post_audio_to_s3
    puts "*** POST_AUDIO_TO_S3 PARAMS:" + params.inspect

    con = AWS::S3::Base.establish_connection!(
      :access_key_id     => 'MYKEY',
      :secret_access_key => 'MYSECRET')

    puts "** CON='#{con.inspect}'"

    snd = AWS::S3::S3Object.store(params[:filename], 
                        Tempfile.open(params[:filename]).path, 
                        'bb_audios')
    puts "** SND='#{snd.inspect}'"

ОБНОВЛЕНИЕ: Почти работает, но файл нулевой длины создан.Я вроде как болтаюсь, не зная, как использовать Tempfile, но я добавил require 'tempfile' в класс контроллера и изменил строку хранения S3 в соответствии с приведенным выше описанием.

Весь этот файл POST-a-file для Heroku / Tempfile заморозил мой мозг ... любые идеи будут оценены.С одной стороны ... я понятия не имею, откуда берутся ДАННЫЕ ... разве я не вижу что-то, кроме имени файла, когда проверяю параметры, если они ПОСТАВЛЯЮТСЯ в приложение?

Ответы [ 2 ]

1 голос
/ 16 февраля 2011

Это должно работать так же, как при загрузке файла HTML-формы

<form action="/post_audio_to_s3" method="post" enctype="multipart/form-data">
<input type="file" id="file" name="file"/>
<input type="submit" value="Upload"/>
</form>

Попробуйте сначала протестировать свое действие, используя эту форму.А затем убедитесь, что ваш сторонний API предоставляет файл в виде HTML-запроса POST с несколькими частями.

0 голосов
/ 17 февраля 2011

Ответ был следующим.Нам пришлось изменить параметр url с filename = на myfilename =, потому что магия rails автоматически использует «filename» для данных POST, поэтому они топали друг друга в params [].

openme = params['filename'].tempfile.path

snd = AWS::S3::S3Object.store(params[:myfilename], 
                        File.open(openme), 
                        'MYBUCKET')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...