#heroku #amazon-s3 #ruby-on-rails-3.1 #content-disposition
#heroku #amazon-s3 #ruby-on-rails-3.1 #содержимое-расположение
Вопрос:
Я пытаюсь разрешить пользователям загружать файл 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. Файл воспроизводится нормально.
Ответ №1:
Это работает для 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'
Комментарии:
1. Он возвращает:
uninitialized constant PagesController::AWS
. У меня установлен AWS gem, и в моем gemfile2. Кстати, я делаю это в PagesController. Есть какие-нибудь идеи, почему возникает эта ошибка?
3. Ммм … попробуйте ::AWS::S3::S3Object и т.д. (обратите внимание, что AWS имеет префикс ::)
Ответ №2:
попробуйте отправить данные AWS::S3.new.buckets[‘music’].objects[«путь /к / вашему/файлу.mp3»].read, имя файла: «some_file_name.mp3»