使用S3中的现有文件创建activestorage附件

时间:2019-04-01 09:06:31

标签: ruby-on-rails amazon-s3 rails-activestorage

我有一个使用ActiveStorage向文档添加附件的文档模型:

class Document < ApplicationRecord
 has_one_attached :attachment
end

我还有一个现有的S3存储桶,其中包含各种格式的图像:jpg,png。

我需要创建一个新文档,附件是我的S3存储桶中已有的特定图像。

到目前为止,我已经尝试过:

s3 = Aws::S3::Resource.new(region: "us-east-1")
obj = s3.bucket("my-bucket-name").object("s3-object-key")
params = {
 filename: obj.key, 
 content_type: obj.content_type, 
 byte_size: obj.size, 
 checksum: obj.etag.gsub('"',"")
}
blob = ActiveStorage::Blob.create_before_direct_upload!(params)

这成功创建了ActiveStorage :: Blob对象

但是当我尝试创建文档时,像这样:

d = Document.create!(attachment:blob.signed_id, name: "new document")

似乎正在链接附件,但是我无法查看或下载附件,并且如下所示的常规活动存储方法不再起作用:

<%= link_to "View", document.attachment.service_url if doc.attachment %>

我刚得到这个错误:

undefined method `service_url' for #<ActiveStorage::Attached::One:0x00007fd7d3f161e0>

如果有人对如何创建带有与S3中的现有文件相对应的附件的文档有更好的建议,将不胜感激。

0 个答案:

没有答案