使用Paperclip更改上传的AmazonS3中的文件目录

时间:2016-02-05 13:18:59

标签: ruby-on-rails amazon-web-services amazon-s3 paperclip

我正在使用Paperclip + Amazon S3来管理用户的上传。我的应用程序现已投入生产,但我必须从

更改文件路径/ URL
has_attached_file :file, 
:url => "#{ENV['AWS_S3_FOLDER']}/attachments/:basename_:id.:extension", 
:path => "#{ENV['AWS_S3_FOLDER']}/attachments/:basename_:id.:extension"

:url  => "#{ENV['AWS_S3_FOLDER']}/attachments/patient_:patientid/:basename_:id.:extension", 
:path => "#{ENV['AWS_S3_FOLDER']}/attachments/patient_:patientid/:basename_:id.:extension"

现在,由于路径更改,我无法访问已在AWS S3上上传的文件。有没有办法替换已经上传到正确路径的文件,以便我可以访问它们?还有一个问题,url和:path之间的区别是什么?

1 个答案:

答案 0 :(得分:0)

我们遇到了一个非常相似的问题。我们这样做的方法是在我们的模型中创建一个新字段,这样我们现在有两个使用has_attached_file的字段:

has_attached_file:file

has_attached_file:new_file

在new_file中定义新的正确路径。

然后在处理添加new_file的迁移中,输入代码保存!每条记录。 这会将所有文件放在需要的位置。

然后再做一次迁移以删除new_file并更改has_attached_file:文件以指向正确的路径。

然后你需要清理S3。在我们的例子中,它很容易,因为我们更改了根路径,因此我们可以轻松删除所有旧文件。

我们没有定义:url,只是路径,但这是一段时间(Rails 3 app)。

我可以告诉你,我们现在在所有新项目中都使用了carrierwave而不是paperclip,因为我们发现它更好地维护并且效果更好。

希望这有帮助。