节点:AWS s3-如何查看特定对象是否存在(使用IfModifiedSince)?

时间:2018-08-07 09:29:33

标签: node.js amazon-s3 aws-lambda

因此,我在节点中所做的就是将图像上传到S3上的tmp存储桶,然后lambda调整图像的大小并将其保存到特定位置(不同存储桶)。.

现在,我想得到的反馈是lambda是通过操纵完成的。...通常,我会知道,仅通过检查资源是否存在即可,方法是:waitFor: objectExists

var params = {
  Bucket: 'STRING_VALUE', /* required */
  Key: 'STRING_VALUE', /* required */
};
s3.waitFor('objectExists', params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

所有好东西和花花公子...第一次工作...但是如果资源已经存在,则无法按预期工作....所以我需要检查它是否存在新版本...亚马逊的文档说有一个名为IfModifiedSince的选项,它需要一个日期...

所以,如果我做这样的事情:

const date = new Date();
const minute = date.getMinutes();
date.setMinutes(minute - 1); // it's just for illustration purposes, not last code ;)

var params = {
  Bucket: PLAYESR_BUCKET,
  Key: file,
  IfModifiedSince: date,
};

s3.waitFor('objectExists', params, function(err, data) {

...

我得到一个错误:

  

未找到错误:资源不在状态objectExists

{
  message: 'Resource is not in the state objectExists',
  code: 'ResourceNotReady',
  region: null,
  time: 2018-08-07T09:16:44.441Z,
  requestId: '6AFB651A109CD28F',
  extendedRequestId: 'xxx',
  cfId: undefined,
  retryable: true,
  statusCode: 404,
  retryDelay: 5000
}

再次,我第一次这样做,它运行良好。 文件一旦存在,我就会收到此错误

1 个答案:

答案 0 :(得分:0)

正如Michae l建议的那样,我不是在检查特定对象是否存在(正如他提到的那样,它可能会获得覆盖标志)...每次创建/覆盖并创建${timestamp}.json时,而是检查它的存在。...可能不是最优雅的方法,但要完成工作