Как заставить рельсы получать данные из фрагмента aws s3 по фрагментам и отправлять их в браузер в формате pdf? - PullRequest
0 голосов
/ 20 июня 2019

У меня есть некоторая путаница с тем, как получить файл из aws s3, не записывая его как файл, но, возможно, как временный файл, который удаляется автоматически. так что мой друг сказал мне, чтобы буферизовать поток данных по блокам и отправить их в браузер в виде загружаемого файла.

Так вот мой код для скачивания файла

 def download(key)
   File.open('filename', 'wb') do |file|
    s3.get_object(bucket: 'bucket-test', key:key) do |chunk|
     send_data(chunk,:type => application/pdf, :disposition => 'inline')
    end
   end
 end

поставляется, и ошибка о морском коньке не может быть преобразована в строку. и я на самом деле не понимаю этого.

Как сделать потоковую передачу данных из aws (pdf-файл) и отправить их в браузер в виде загружаемого pdf-файла? мой код отличается от того, для чего я предназначен?

спасибо, пожалуйста

1 Ответ

0 голосов
/ 22 июня 2019

Просто извлеките весь файл в память и затем отправьте его:

response = s3.get_object(bucket: 'bucket-test', key: key)
send_data(response.body.read, type: application/pdf, disposition: 'inline')

Этот метод также имеет то преимущество, что он будет повторять сетевые ошибки, поэтому он более устойчив, чем метод chunked, который отключает повторные попытки наошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...