Загрузить файл в сервисный объект с ActiveStorage - PullRequest
0 голосов
/ 20 апреля 2020

Пользователь загружает документ, и он сохраняется в Azure с ActiveStorage. Следующим шагом является то, что серверная часть обрабатывает это, и поэтому у меня есть объект службы для этого. Поэтому мне нужно скачать файл из Azure в папку tmp в приложении Rails. Как мне скачать файл? Я не могу использовать rails_blob_url, потому что он недоступен в сервисном объекте, только в контроллерах и представлениях.

Когда я все еще использовал Paperclip, я делал что-то вроде этого:

require 'open-uri'
file = Rails.root.join('tmp', user.attachment_file_name)
name = user.attachment_file_name
download = open(user.attachment.url)
download_result = IO.copy_stream(download, file)

Как можно Я делаю нечто подобное с ActiveStorage?

1 Ответ

1 голос
/ 20 апреля 2020

Вы можете использовать ActiveStorage :: Blob # open :

Загрузка большого двоичного объекта в временный файл на диске. Возвращает временный файл.

Учитывая этот пример из руководств:

class User < ApplicationRecord
  has_one_attached :avatar
end

Вы можете сделать это с помощью:

user.avatar.open do |tempfile|
  # do something with the file
end

Если его has_many_attached вы конечно надо l oop через вложения.

См .:

...