3

我一直在使用marcel/s3,直到我们最近不得不升级到aws-sdk(版本 2)。

我们注意到的一个变化是,我们现在不能对过期时间超过一周的 URL 进行签名,因为我们得到了一个例外:ArgumentError: expires_in value of #{X} exceeds one-week maximum.

我尝试覆盖ONE_WEEK 常量,这让我可以创建签名的 URL。问题是现在 curl 获得的 URL 我得到400响应,包括X-Amz-Expires must be less than a week (in seconds); that is, the given X-Amz-Expires must be less than 604800 seconds.

aws-sdk v2如何使用(我可以使用)在一个 URL 上签名超过一周marcel/s3?是否切换到aws-sdk v1替代方案来实现这一目标?

我注意到每个库生成的 URL 之间的区别:

  • marcel-s3: 使用AWSAccessKeyId,ExpiresSignature作为查询参数。
  • aws-sdk v2: 使用X-Amz-Algorithm, X-Amz-Credential, X-Amz-Date, X-Amz-Expires,X-Amz-SignedHeadersX-Amz-Signature作为查询参数。
4

1 回答 1

0

使用 v1 的 aws-sdk(连同 v2 的其他东西)对我有用。示例代码:

def url s3_key, public_path=false
  s3 = AWS::S3.new # aws-sdk v1 s3 client
  v1_obj = s3.buckets[BUCKET_NAME].objects[s3_key]
  if public_path
    v1_obj.public_url.to_s
  else
    v1_obj.url_for(:read, expires: (2.weeks.since - Time.now).to_i).to_s
end
于 2016-02-04T15:33:59.707 回答