如何从 Amazon s3 中读取 Rails、(images/text) 中手动上传的文件?

How do I read files, in Rails, (images/text) from Amazon s3 that were uploaded manually?

首先,我是 Rails 和 Stack Overflow 的新手,目前正在通过学​​习曲线摸索前进,所以如果我的 post 是可笑的菜鸟,我深表歉意。这是我的问题:

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

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

上找到 my project

我的博客模型:

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

这是我的博客控制器:

class BlogController < ApplicationController
    before_action :load_posts


      def index  #this method puts all the stuff pulled from 'load_posts' and packages it nicely in a instanced variable
    @blogPosts = BlogPost.all
    end

    def load_posts  #this method should pull posts from AWS s3 and add them to the database (like magic)

    end

end

我敢肯定我的代码中存在漏洞...比如与 s3 实际对话的东西。我知道我想做的大部分事情可能都在我的模型中。我觉得真的卡住了。我希望有一些我可以使用的简单、神奇的 Ruby 方法,比如 s3.file.read 之类的。另一种选择是为自己创建一个表单,就像我是用户一样,将数据库中的所有内容连接在一起,然后上传到 s3。然而,我读过人们 运行 遇到的问题,例如当他们尝试通过 heroku 上传大文件(如大图像)并上传到 s3 时,dynos 超时。我已经阅读了有关如何直接上传到 s3 的教程,但我不妨跳过该过程,只需单击 s3 控制台上的 'upload' 按钮即可。任何事情都会有所帮助。再次感谢大家。

你正在使用 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