PHP AWS api对PUT桶生命周期的原始请求

时间:2017-03-09 10:18:20

标签: php amazon-web-services amazon-s3 amazon-glacier

我正在创建一个网站,其中有一项功能,如果用户删除图像/视频,它将被存档,我使用AWS S3存储和删除想要在Glacier上移动它,我不想使用AWS SDK,所以我使用PHP cURL创建Raw请求,从这个链接我试图将桶生命周期放在一个对象http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlifecycle.html上并完成一些代码,但它给了我错配签名的错误,

var popup = new google.maps.InfoWindow({ content: feature.position.toString() + ' my info siteID: ' + feature.info , //or here the info maxWidth: 300 });

这是我的代码,在此我想在SignatureDoesNotMatch-The request signature we calculated does not match the signature you provided. Check your key and signing method.上应用生命周期,这是在一个存储桶内,应用生命周期使其过期,我做错了什么?帮助我,

x.php

1 个答案:

答案 0 :(得分:1)

我认为您并不完全了解生命周期政策的运作方式。

$path = '/x.php'; // file on which i want to put lifecycle to move it to GLACIER

您不会移动单个文件。您配置前缀。 应该在您的XML文档中。 你已经有了这个

<Prefix>/</Prefix>

  1. PUT生命周期应始终为/?lifecycle。你把它作为/x.php
  2. 使用AWS Signature V4而不是V2可能会更好,因为一些较新的区域不支持Signature V2,但所有区域都支持Signature V4。更多信息:http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html
  3. 使用签名V4,即使您看到错误消息SignatureDoesNotMatch,您还应该看到其他消息,<StringToSignBytes></StringToSignBytes><CanonicalRequest></CanonicalRequest>。这些应该足以让您隔离并解决这个问题。
  4. 您提到要将其移至GLACIER,但您未在XML内容中提及此问题。请参阅&#34;示例1:添加生命周期配置 - 存储桶未启用版本控制&#34; http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlifecycle.html此页面上的部分您的XML中需要<StorageClass>GLACIER</StorageClass>
  5. 希望这有帮助。