【问题标题】:how to assign paperclip to file on aws using aws sdk如何使用aws sdk将回形针分配给aws上的文件
【发布时间】: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


【解决方案1】:

正如@laertiades 在他修改后的问题中所说,一种解决方案是使用 AWS 开发工具包创建一个临时的预签名 URL。

AWS 开发工具包版本 1

在 AWS SDK 版本 1 中,如下所示:

s3 = AWS::S3.new
bucket = s3.buckets['bucket_name']
my_object.file_attachment = bucket.objects['relative/path/of/uploaded/file.ext'].url_for(:read)

AWS 文档:http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/S3Object.html#url_for-instance_method

AWS SDK 版本 2

在 AWS SDK 版本 2 中,它看起来像这样,带有可选的 expires_in 参数(在另一个问题上归功于 this answer):

presigner = Aws::S3::Presigner.new
my_object.file_attachment = presigner.presigned_url(:get_object, # get_object method means read-only
                              bucket: 'bucket-name',
                              key: "relative/path/of/uploaded/file.ext",
                              expires_in: 10.minutes.to_i # time should be in seconds
                              ).to_s

AWS 文档:http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Presigner.html

【讨论】:

    猜你喜欢
    • 2018-01-05
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2019-12-06
    • 2017-11-08
    • 2017-01-10
    • 2021-05-05
    相关资源
    最近更新 更多