【发布时间】:2014-09-14 18:28:58
【问题描述】:
我已经能够让第三方客户端将文件直接上传到 AWS s3,然后使用回形针在模型中使用以下行处理这些文件:
my_object.file_attachment = URI.parse(URI.escape(my_bucket.s3.amazonaws.com/whatever.ext))
该行下载文件,对其进行处理,然后适当地保存它。问题是,为了使该行正常工作,我必须为上传位置提供匿名读取权限。所以我的问题是:如何避免这种情况?我的想法是使用 aws-sdk 下载文件 - 所以我一直在尝试类似的东西:
file = Tempfile.new('temp', :encoding => 'ascii-8bit')
bucket.objects[aws_key].read do |chunk|
file.write chunk
end
my_object.file_attachment = file
以及该主题的变体,但到目前为止没有任何效果。任何见解都会很有帮助。
我不太满意的解决方案
您可以使用 AWS 开发工具包生成临时特权 URL:
s3 = AWS::S3.new
bucket = s3.buckets['bucket_name']
my_object.file_attachment = bucket.objects['relative/path/of/uploaded/file.ext'].url_for(:read)
【问题讨论】:
-
我今天刚打了这个。这可能解释了为什么我会收到 403 Forbidden 错误。你有没有找到解决办法?我不能允许匿名读取,而且 PaperClip 已经拥有读/写凭据。
-
@MarkBerry 查看对 OP 的编辑
-
太棒了!谢谢你。我已针对 SDK 2 进行了更新,并将作为答案发布。
标签: ruby-on-rails ruby-on-rails-4 amazon-web-services amazon-s3 paperclip