用户上载文档,该文档通过ActiveStorage存储在Azure中。下一步是后端处理此操作,因此我有一个服务对象来执行此操作。因此,我需要将文件从Azure下载到Rails应用程序中的tmp
文件夹中。如何下载文件?我无法使用rails_blob_url
,因为它在服务对象中不可用,仅在控制器和视图中不可用。
当我仍然使用回形针时,我做了这样的事情:
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做类似的事情?
您可以使用ActiveStorage::Blob#open:
将blob下载到磁盘上的临时文件。产生临时文件。
参考指南中的示例:
class User < ApplicationRecord
has_one_attached :avatar
end
您可以使用:
user.avatar.open do |tempfile|
# do something with the file
end
如果是has_many_attached
,您当然需要遍历附件。
参见: