Musisz przesłać strumieniowo zawartość pliku do użytkownika podczas odczytu z wiadra/obiektu S3.
Jeśli używasz coś Biblioteka AWS::S3 jak to może działać:
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
}
Kod ten jest najczęściej kopiowane formularz na send_file kod, który sam w sobie działa tylko dla plików lokalnych lub plikopodobny obiektów
nb W każdym razie odradzam podawanie pliku z samego procesu railsowego. Jeśli to możliwe/akceptowalne dla twojego przypadku użycia, użyłbym uwierzytelnionego GETGET, aby podać prywatne dane z wiadra.
Korzystając z uwierzytelnionego polecenia GET, można zachować zasobnik i jego obiekty jako prywatne, jednocześnie umożliwiając tymczasowe zezwolenie na odczytanie określonej treści obiektu poprzez tworzenie adresu URL zawierającego token uwierzytelniania podpisu. Użytkownik jest po prostu przekierowywany na uwierzytelniony adres URL, a token może być ważny tylko przez kilka minut.
Korzystanie z ww AWS :: S3 można uzyskać uwierzytelnioną url dostać się w ten sposób:
time_of_exipry = Time.now + 2.minutes
S3Object.url_for(<s3 object>, <s3 bucket>,
:expires => time_of_exipry)
możliwy duplikat [jak wymusić wysłanie \ _data, aby pobrać plik w przeglądarce?] (Http://stackoverflow.com/questions/7337508/how-to-force-send-data-to-download- plik-w-przeglądarce) –