AWS S3没有此类密钥存在错误

时间:2018-02-05 11:32:14

标签: node.js amazon-s3

我的客户端在AWS-S3上存储了许多图像。我能够得到那些图像。问题是他们之前用数字键存储图像,现在他们使用GUID。例如,密钥可以是12345 / MyFile.jpg或ASDF-XYZ / MyFile.jpg,并且它们不存储密钥。存储在DB中的唯一内容是userId和fileName。所以我在数据库中只有12345 / MyFile.jpg。当我尝试使用以下代码时:

var params = {
    Bucket: bucketName,
    Key: "12345/MyFile.jpg",
    IfMatch: eTag,
    };

var fileStream = s3.getObject(params).createReadStream();

仅在存在时才有效。如果该文件不存在,则抛出异常"不存在这样的密钥"。因此该文件存在于GUID密钥下。

var params = {
    Bucket: bucketName,
    Key: "ASDF-XYZ/MyFile.jpg",
    IfMatch: eTag,
    };

var fileStream = s3.getObject(params).createReadStream();

这很有效。那么,有什么方法可以检查文件是否存在于数字目录中(为了澄清),代码从中读取,否则它应该从GUID目录中获取图像?我尝试过try-catch但是没有用。

1 个答案:

答案 0 :(得分:1)

一般做法是使用headObject检查S3中的元数据,您可以使用它来查明是否存在错误,如果是,则返回旧样式。

以下代码博客假设您首先尝试数字目录并回退到GUID。

s3.headObject(numericDirectoryParams).on('success', function(response) {
  return s3.getObject(numericDirectoryParams).createReadStream();
}).on('error',function(error){
  // File did not exist in numeric directory, get in GUID
  return s3.getObject(GUIDparams).createReadStream();
}).send();