我的客户端在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但是没有用。
答案 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();