我已将json文件上传到s3 然后我写了下面的代码来查看文件中的内容
const aws = require('aws-sdk');
const s3 = new aws.S3();
const bucket = 'hotels.mserver.online';
const objectKey = 'hotelsrates.json';
exports.handler = (event,context,callback) => {
// TODO implement
const response = getS3Objects(bucket,objectKey); //s3.listObjectsV2({}).promise();
console.log(response);
};
function getS3Objects(bucket,key) {
return s3.getObject({ Bucket:bucket, Key:key, ResponseContentType:'application/json '})
.promise().then(file => { return file })
.catch(error => { return error });
}`
但仍然为空。
答案 0 :(得分:1)
我了解您要在这里完成的工作,但这不是正确的方法。
function getS3Objects(bucket,key){
return s3.getObject({Bucket:bucket,Key:key,ResponseContentType:'application/json'})
.promise().then(file=>{return file})
.catch(error =>{return error});
}`
以上部分仍将返回一个Promise对象,这意味着您需要相应地处理它。您不想做const response = getS3Objects(bucket,objectKey);
getS3Objects(bucket,objectKey).then(response => console.log(response));
在handler
函数内部。
此外,您对s3.getObject
函数的使用不正确。其中第一个参数是对象-参数,第二个参数是回调函数。
s3.getObject(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data);
因此,在您的情况下,您需要稍微修改getS3Objects
函数。如果您想使用Promise,则可以这样做。
function getS3Objects(bucket, key) {
return new Promise((resolve, reject) => {
s3.getObject(
{
Bucket: bucket,
Key: key,
ResponseContentType: 'application/json'
},
(err, data) => {
if (err) {
reject(err);
} else {
resolve(data);
}
}
);
});
}
答案 1 :(得分:0)
执行此操作的另一种方法如下:
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
async function readFile(Bucket, Key) {
const params = {
Bucket,
Key,
ResponseContentType: 'application/json',
};
const f = await s3.getObject(params).promise();
return f.Body.toString('utf-8');
}
readFile('mybucket', 'xyz.json').then(console.log);