S3上的Carrierwave上传和访问文件

时间:2017-01-26 21:37:43

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

我正在努力使用Carrierwave访问S3上的文件。

在我的上传程序文件doc_uploader.rb中,我有以下代码

storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end

到uplooad“doc”模型定义如下

class Doc < ActiveRecord::Base
belongs_to :user
mount_uploader :doc, DocUploader
end

要访问上传的文件,我在控制器中有以下代码行

@doc = current_user.docs.order("created_at").last #last file uploaded by user
io = open("#{Rails.root}/public" + @doc.doc.url)

一切都在当地完美运作。现在我想在上传器中将文件移动到S3,我使用雾并替换

storage :file

通过

storage :fog

我调整配置文件carrierwave.rb,上传效果很好。但是,要访问该文件,我尝试使用

@doc = current_user.docs.order("created_at").last
io = open("#{@doc.doc.url}")

我收到以下错误

No such file or directory @ rb_sysopen - /uploads/doc/doc/11/the_uploaded_file.pdf

有人能给我正确的语法来访问S3上的文件吗?感谢。

1 个答案:

答案 0 :(得分:0)

通过控制台访问资产时,它只为您提供路径,您可能需要附加协议&amp;托管@doc.doc.url,例如:

io = open("http://example.com#{@doc.doc.url}")

或者您可以在您需要的环境中设置资产网址,但这不是必需的:

 config.asset_host = 'http://example.com'

这仅适用于您使用控制台的情况,在任何不适用的网络视图中,carrierwave似乎都会处理它