如何从 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。
首先,我是 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。