我一直在使用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:使用AWSAccessKeyIdExpiresSignature作为查询参数。
  • aws-sdk v2:使用X-Amz-AlgorithmX-Amz-CredentialX-Amz-DateX-Amz-ExpiresX-Amz-SignedHeadersX-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/

    10-16 23:26