@rusrich

Как получить прямой путь до файла, загруженный через Active Storage?

Решил обойтись без дополнительных гемов, так как реализация с помощью Carrierwave сильно грузит систему при работе с гигабайтными файлами. Начал делать через стандартный Active Storage.

Но возникла проблема.
Для конвертации видео мне нужен полностью путь до файла.
Его я не знаю как получить.
В модели видео прописываю следующее:

class Video < ApplicationRecord
has_one_attached :clip
include Rails.application.routes.url_helpers
def cover_url
rails_blob_path(self.clip, disposition: "attachment", only_path: true)
end
end

Во вьюхе для примера вывожу url файла
<%= rails_blob_url(@video.clip) if @video.clip.attached? %>

Получаю такое:
localhost:3000/rails/active_storage/blobs/eyJfcmFp...

Физически файл лежит тут:
storage/fT/Xr/fTXr7uMF7geiFtrS2HcxNhJE

При чем fTXr7uMF7geiFtrS2HcxNhJE - это сам файл без расширения.
/fT/Xr/ - эти директории генерируются рандомом.

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

Если бы можно было задать примерно такой шаблон
storage/#{video.id}/#{video.clip.filename}.#{video.clip.extension}
Было бы идеально.

Сможете подсказать или направить?
  • Вопрос задан
  • 406 просмотров
Решения вопроса 1
@lebron32rus
Senior Software Engineer
ActiveStorage::Blob.service.send(:path_for, attachment.blob.key)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@bakeevDR
При чем fTXr7uMF7geiFtrS2HcxNhJE - это сам файл без расширения.
/fT/Xr/ - эти директории генерируются рандомом.


Директории не генерируются рандомно а берутся с названия файла по первым 4 символам , название файла можно взять из базы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы