Amb*_*ous 2 javascript amazon-s3 amazon-web-services node.js aws-lambda
我正在 NodeJs 中编写一个 lambda 函数,我想检查 S3 中是否存在文件。如果文件存在,我返回“A”,否则返回“B”。我正在使用 S3.HeadObject 来获取对象元数据作为承诺。
exports.handler = async (event, context, callback) => {
var params = {
Bucket: "BucketName",
Key: "ObjectName"
};
const response = s3.headObject(params).promise();
Run Code Online (Sandbox Code Playgroud)
我能够得到响应,但无法检查文件是否存在。我首先尝试了 if/else 子句
response.then(function(result) {
const type = result['ContentType'];
if(type == 'image/jpeg') {
return "URL1"
} else {
return "URL2"
}
});
Run Code Online (Sandbox Code Playgroud)
但是,我从未返回 URL1 或 URL2,lambda 返回 null。浏览了其他一些 SO 帖子,我发现了另一种方法:
s3.headObject(params, function(err, data) {
if (err) {
console.log(err, err.stack);
return;
}
console.log(data)
});
Run Code Online (Sandbox Code Playgroud)
但是,这样我根本得不到任何回应。记录器不打印任何内容。
有人可以告诉我我做错了什么吗?我想根据 S3 中文件的可用性返回特定 URL。如果存在 JPG,则返回 JPG url。否则返回 PNG url。
谢谢!
我用存在/不存在的情况测试了以下一个,根据存在情况打印真/假。自从你提到以来,我没有尝试获取内容或其他元数据(只是可用性)
我想根据 S3 中文件的可用性返回特定 URL
let AWS = require('aws-sdk');
let S3 = new AWS.S3();
exports.handler = async(event, context, callback) => {
let exist = await get();
console.log(exist);
// your exist checks
};
async function get() {
let exist = true;
let params = {
Bucket: "your-bucket-name",
Key: 'your-key'
};
try {
await S3.headObject(params).promise();
} catch (err) {
exist = false;
}
return exist;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1040 次 |
最近记录: |