Вам потребуется передать содержимое файла пользователю, читая его из корзины / объекта S3.
Если вы используете библиотеку AWS :: S3 , что-то вроде этого может работать:
send_file_headers!( :length=>S3Object.about(<s3 object>, <s3 bucket>)["content-length"], :filename=><the filename> )
render :status => 200, :text => Proc.new { |response, output|
S3Object.stream(<s3 object>, <s3 bucket>) do |chunk|
output.write chunk
end
}
Этот код в основном копируется из кода send_file, который сам по себе работает только для локальных файлов или файловых объектов
N.B. В любом случае, я бы посоветовал не обслуживать файл из самого процесса rails. Если это возможно / приемлемо для вашего случая использования, я бы использовал аутентифицированную GET для обслуживания личных данных из корзины.
Используя аутентифицированный GET, вы можете сохранять корзину и ее объекты закрытыми, одновременно предоставляя временное разрешение на чтение содержимого определенного объекта, создав URL-адрес, который содержит маркер подписи аутентификации. Пользователь просто перенаправляется на аутентифицированный URL, и токен можно сделать действительным всего за несколько минут.
Используя вышеупомянутый AWS :: S3, вы можете получить аутентифицированную ссылку GET следующим образом:
time_of_exipry = Time.now + 2.minutes
S3Object.url_for(<s3 object>, <s3 bucket>,
:expires => time_of_exipry)