AWS S3放置对象,如果没有修改,因为(PHP)

时间:2017-09-30 13:35:07

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

仅在现有远程数据(如果存在)自本地数据以来未被修改时才想放置数据。

似乎没有一种机制来处理putObject,所以我的计划是在请求中运行带有IfModifiedSince键的headObject,以确定是否返回了304 Not modified。但是,我不知道如何做到这一点(无法在文档中的$ result对象中找到关于http状态代码的任何内容,$ result看起来基本上是一个关联数组),也不确定是否这样是做到这一点的方式,或者是否有更好的方法。我怀疑在304的情况下会引发一个例外,并且它在$ e-> statusCode中,但我不确定;我总体上很好奇headObject的响应结构在任何情况下都是如此。

由于

1 个答案:

答案 0 :(得分:0)

将对象上传到S3时,上次修改时间是上传时间,而不是源对象的最后修改时间。

当我们编写自定义S3软件时,我们会在密钥中使用原始的最后修改时间存储自定义标头,以便稍后我们可以对此进行比较以确定是否需要更新文件。

自定义标头以“x-amz-meta-XXX”开头。将XXX替换为您的自定义标题名称。然后用这个标题包含时间。

然后,您将读取密钥(对象)标题并比较日期以确定是否需要上传。

另一种方法是创建源文件的MD5,并将其与AWS与S3对象存储的MD5值进行比较。 AWS建议创建源文件的MD5,并在上传对象时提供该值,以便AWS可以在数据传输期间检测数据损坏。