如何从亚马逊s3手动上传的Rails(图像/文本)中读取文件?

时间:2016-03-30 17:20:19

标签: ruby-on-rails amazon-web-services heroku amazon-s3 aws-sdk

首先,我对Rails和Stack Overflow非常陌生,目前在学习曲线上一路狂奔,所以如果我的帖子是可笑的,那么我很抱歉。这是我的问题:

我正在尝试使用Amazon s3从头开始构建博客来存储资源,例如所有图像和文本。我不需要用户将内容上传到网站,所以我想我可以使用console.aws.amazon.com上的控制台手动上传所有内容到s3。我正在尝试编写Rails来读取我的s3存储桶中的文件夹,然后将图像/文本指向数据库中的正确位置。例如,我可以在s3中创建一个名为“Post1”的文件夹,然后我的Rails应用程序从该文件夹中读取所有内容的URL并将其指向数据库中的post1,然后我可以简单地调用图像URL或文本,在视图中,理论上,显示它。我的问题是,如何让我的应用程序读取s3文件夹?

我知道我可能在这里重新发明轮子,但我的目标也是学习Rails。提前谢谢大家。您可以在GitHub上找到my project

我的博客模型:

stat_quantile

这是我的博客控制器:

class BlogPost < ActiveRecord::Base
  has_attached_file :download,
                    :storage => :s3,
                    :s3_credentials => Proc.new{|a| a.instance.s3_credentials }

  def s3_credentials
    {:bucket => "S3_BUCKET_NAME", :access_key_id => "AWS_ACCESS_KEY_ID", :secret_access_key => "AWS_SECRET_ACCESS_KEY"}
  end

end

我确信我的代码中存在大量漏洞......就像实际与s3交谈一样。我知道我想做的大部分内容都可能出现在我的模型中。我觉得很困惑。我希望我可以使用一些简单,神奇的Ruby方法,比如s3.file.read或者其他东西。另一种选择是为我自己创建一个表单,就像我是一个用户一样,将数据库中的所有内容连接在一起,然后上传到s3。然而,当他们尝试通过heroku上传大文件(如大图像)到s3时,我已经读过人们遇到问题,比如dynos超时。我已经阅读了有关如何直接上传到s3的教程,但我也可以跳过这个过程,只需点击s3控制台上的“上传”按钮即可。一切都会有所帮助。再次感谢所有人。

1 个答案:

答案 0 :(得分:1)

你正在使用aws-sdk,好的,我会用s3.file.read等同于你:Aws::S3::Object#get

# create your bucket first
s3_file = bucket.object['myfile.txt'].get({response_target: '/tmp/myfile.txt'})

我认为你可以做s3_file.body

最后,您正在重新发明轮子,应该退房carrierwave with aws-sdk