使用ActiveStorage下载服务对象中的文件

问题描述 投票:0回答:1

用户上载文档,该文档通过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做类似的事情?

ruby-on-rails rails-activestorage
1个回答
1
投票

您可以使用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,您当然需要遍历附件。

参见:

© www.soinside.com 2019 - 2024. All rights reserved.