2014-12-05 2 views
2

У меня есть веб-приложение с рельсами, сидящее на веб-сервере nginx. У меня есть несколько аудиофайлов на моем сервере, и я хочу, чтобы люди могли их слушать, и иметь возможность искать любую часть аудиофайла для прослушивания с этого момента.Как передать аудиофайл без прямой ссылки

Простое право?

Я использовал прямые ссылки в src моего элемента html5 audio. Он отлично работал. Файл можно играть и искать работу.

Введите защиту и проверяемость.

Мои аудиофайлы чувствительны. Я хочу, чтобы некоторые люди могли их слушать. Мне также нужно знать каждый раз, когда они их слушают. Внезапно общий каталог не будет работать.

Введите файл отправки rails.

Первоначально Send_file оказался именно тем, что мне нужно. Он позволяет рельсам обслуживать мои аудиофайлы, и я могу хранить свои файлы в защищенном каталоге, я мог бы проверять разрешения текущего пользователя, и я мог бы создать соответствующий контрольный журнал. За исключением ...

С send_file я не могу искать. Это разбойник.

Несколько вопросов, связанных с stackoverflow, для получения send_file для обработки запросов диапазона http/range/byte. Те, которые я рассмотрел являются:

what is the proper way to serve mp4 files through rails...

rails media file stream accept byte range request through send file ...

После выполнения дополнительных исследований, я нашел следующее сообщение в блоге: https://blog.echoplex.us/2014/08/19/so-you-want-to-stream-videoaudio-with-rails/

Tl; др не используют рельсы send_file служить СМИ. не пытайтесь сделать это, как, например, вопросы stackoverflow. Вместо этого используйте nginx и X-Accel-Redirect, и в итоге вы получите конвейер запросов, который выглядит как you-> nginx-> rails-> nginx-> you

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

Какие у меня варианты?

(также, можно предположить, что я использую текущие версии рельсов и Nginx)

+0

Вы решили проблему? – Anatoly

+0

Ну, прошло некоторое время. Я думаю, что мы, возможно, закончили использование S3 для обслуживания аудиофайлов. Таким образом, не было ответа на отличный рельс. Я должен вернуться к коду, чтобы быть уверенным. –

ответ

2

НЕ ИСПОЛЬЗОВАТЬ SendFile пожалуйста. Используйте X-Accel-Redirect или совет ниже.

Модуль Nginx secure_link помогает вам обслуживать файлы прямо с диска с помощью частных ссылок. Бэкэнда не требуется. Полный пример: here.

Смежные вопросы