Возобновление файлов загрузки в Ruby на Rails
-
30-09-2019 - |
Вопрос
Наконец узнал, как добиться этого!
Оказалось, что так просто, как включение xsendFile и настройки заголовка параметра Accept-range
Прочитайте мой ответ ниже
(Кстати, в блоке цитату ниже я написал общие ловушки новичков - как я сделал. Мы склонны думать, что это должно быть вручную запрограммировано)
URL должен быть что-то вроде: mysite.com/get_file?file_point=100 -> это будет читать из байта 100
- Получите смещение от параметра (параметр file_point в нашем примере)
- Узнайте размер файла (file.size)
- Прочитайте файл из смещения на длину (эквивалент FSeek в PHP)
- Отправить файл с помощью send_file
Я не знаю, как сделать шаг № 3 в Ruby на ступеньках выше.
Решение
Вот как я это сделал:
response.header["Accept-Ranges"] = "bytes"
send_file product.pack.path, :type => product.pack_content_type, :x_sendfile=>true
Я попросил нашего сервера парня настроить Mod_xsendFile, я не знаю, как сам настроить.
Учебник здесь: http://www.devsource.com/c/a/techniques/resumable-file-downloads-with-aspnet/2/
Читайте о длине содержимого здесь: http://www.w3.org/protocols/rfc2616/rfc2616-sec14.html#sec14.13.
О потоковой передаче доступно здесь: http://api.rubyonrails.org/Classes/actionController/streaming.html.