将Paperclip路径文件名从服务器更新至s3

4

我有一个 Paperclip 实例,我正在将我的文件迁移到另一个区域。最初,这些文件存储在我的服务器上,并根据创建记录的 id 和原始 id 给定文件名。现在,我想将它们移动到 S3 并更新文件名以适当地工作。我像这样设置了 Paperclip 配置:

:path => ":class/:attachment/:hash-:style.:extension",
    :url => ":s3_domain_url",
    :hash_secret => SECRET,
    :hash_data => ":class/:attachment/:id/:updated_at"

我将我的文件的原始记录文件名更新为唯一并将它们移动到了我的S3实例。不幸的是,现在我无法从S3中下载文件,我认为这是因为paperclip正在使用错误的文件名路径。其中一个基于路径默认设置使用我的配置文件的路径。我想要更新我的files file_name字段,以便路径对新文件正确,并能够适当地下载它们。是否有一种方法可以直接调用paperclip哈希函数 based on my secret and hash_data 以便我可以更新那些file_name字段,并能够pull those records now?自从从原始服务器迁移以来上传的所有内容似乎都正常工作。

你是否在寻找这个 https://github.com/thoughtbot/paperclip/wiki/Hashing? - Pavan
1个回答

3

假设你有一个名为User的模型,其中包含一个名为profile_pic的附件;

进入Rails控制台,例如rails c,然后获取该模型对象的实例,例如u = User.find(100)

现在输入u.profile_pic.url以获取URL或u.profile_pic_file_name以获取文件名。

要查看其他选项(例如您的旧选项)的效果,请执行以下操作:

p = u.profile_pic # gets the paperclip attachment for profile_pic
puts p.url # gets the current url
p.options.merge!(url: '/blah/:class/:attachment/:id_partition/:style/:filename')
puts p.url # now shows url with the new options

同样地,p.path将显示您选择的任何选项的本地文件路径。
长话短说,就像这样;
User.where('created_at < some_date').map do |x| 
  "#{x.id} #{x.profile_pic_file_name} #{x.profile_pic.path}" 
end

应该会给您想要的东西 :)

我不确定我理解这个问题 - 你可以在S3上重命名文件。 - Anko
...怎么做?aws-sdk在您操作s3存储桶内的对象上只有只读项。我发布了另一个问题(https://dev59.com/i43da4cB1Zd3GeqPxUE1),其中包含更多信息。 - nobody

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接