我一直在使用marcel/s3,直到最近我们不得不升级到aws-sdk(版本2)。
我们注意到的一个变化是,我们现在无法对过期时间超过一周的URL进行签名,因为我们得到了一个例外:ArgumentError: expires_in value of #{X} exceeds one-week maximum
。
我尝试覆盖ONE_WEEK constant,这使我可以创建签名的URL。事情是,现在卷曲获取的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
,Expires
和Signature
作为查询参数。 aws-sdk v2
:使用X-Amz-Algorithm
,X-Amz-Credential
,X-Amz-Date
,X-Amz-Expires
,X-Amz-SignedHeaders
和X-Amz-Signature
作为查询参数。 最佳答案
使用aws-sdk的v1(以及其他内容的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
关于aws-sdk - 如何使用aws-sdk for Ruby对URL签名超过一周?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35202879/