Как обслуживать файлы S3 из приложения Rails? - PullRequest
3 голосов
/ 07 октября 2011

Я пытаюсь разрешить пользователям загружать файл S3, нажав левую ссылку. Как правило, они должны были бы сделать это, щелкнув правой кнопкой мыши и сохранив как.

Я посмотрел на http://apidock.com/rails/ActionController/DataStreaming/send_file, но не уверен, что это то, что я хочу.

Эта статья http://www.jtricks.com/bits/content_disposition.html в основном показывает, как это можно сделать путем настройки Apache. Тем не менее, мы используем Heroku.

Кто-нибудь использовал Content-Disposition прежде, чем обслуживать файлы из S3? Также интересно, занимает ли это целый веб-процесс (Dyno)? Или, если вместо этого весь процесс происходит на сервере S3?

Я пытался:

send_file 'http://some_bucket_name.s3.amazonaws.com/uploads/users/28/songs/88/test.mp3', :type => 'audio/mp3', :disposition => 'attachment'

И я получаю:

Cannot read file http://some_bucket_name.s3.amazonaws.com/uploads/users/28/songs/88/test.mp3

Файл существует. Если я вручную перейти к URL. Файл воспроизводится нормально.

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Это работает для Rails 3. В вашем контроллере выполните:

response.headers['Content-Disposition'] = "attachment; filename=#{original_filename}"
self.response_body = proc { |response, output|
  AWS::S3::S3Object.stream(path, 'some_bucket_name') { |segment|
    output.write segment
  }
}

В вашем случае:

original_filename = 'test.mp3'
path = '/uploads/users/28/songs/88/test.mp3'
0 голосов
/ 28 июля 2014

try send_data AWS :: S3.new.buckets ['music']. Objects ["path / to / your / file.mp3"]. Read, имя файла: "some_file_name.mp3"

...