将活动存储输出写入临时文件

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

您如何将activestorage下载的输出写入临时文件。

[以后每读一次,它就会变成一个空字符串。

这是我尝试过的代码:

@file_temp = Tempfile.new
@file_temp.binmode
@file_temp.write(model.activestorage_attribute.download)
ruby-on-rails ruby rails-activestorage
2个回答
1
投票

ActiveStorage::Blob#download将为您提供一个Blob,可用于内存中的其他操作。

Tempfile.new将创建属于IO对象并具有位置指针的文件。当您写入文件时,位置将前进。

您需要rewind到该位置。尝试以下操作:

@file_temp = Tempfile.new
@file_temp.binmode
@file_temp.write(model.activestorage_attribute.download)
@file_temp.rewind

然后您将能够读取数据:

@file_temp.read
#=> "...\x8F\xFF\x00\x16G\xFE\xAE\x0F\xE5\x0E\xED..."

0
投票

您也可以直接拨打ActiveStorage::Blob#open而不是重新发明轮子。

将blob下载到磁盘上的临时文件。产生临时文件。

ActiveStorage::Blob#open

如果您真的想自己做,那么正确的方法是:

blob.open do |temp_file|
  # do something with file...
end
# file is automatically closed and unlinked
© www.soinside.com 2019 - 2024. All rights reserved.