繁体   English   中英

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

[英]AWS S3 No Such Key Exist Error

我的客户端在AWS-S3上存储了许多图像。 我能够得到那些图像。 问题是,他们以前使用数字键存储图像,而现在使用GUID。 例如,密钥可以是12345 / MyFile.jpg或ASDF-XYZ / MyFile.jpg,并且它们不存储密钥。 存储在数据库中的唯一内容是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,但这不起作用。

通常的做法是使用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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM