#javascript #node.js #amazon-web-services #amazon-s3 #aws-lambda
#javascript #node.js #amazon-веб-сервисы #amazon-s3 #aws-lambda
Вопрос:
Я использую версию узла 12.x для написания моей лямбда-функции. Вот ошибка синтаксического анализа, которую я получаю. В чем может быть причина?
Обновить
const im = require("imagemagick");
const fs = require("fs");
const os = require("os");
const uuidv4 = require("uuid/v4");
const {promisify} = require("util");
const AWS = require('aws-sdk');
const resizeAsync = promisify(im.resize)
const readFileAsync = promisify(fs.readFile)
const unlinkAsync = promisify(fs.unlink)
AWS.config.update({region: 'ap-south-1'})
const s3 = new AWS.S3();
exports.handler = async (event) => {
let filesProcessed = event.Records.map((record) => {
let bucket = record.s3.bucket.name;
let filename = record.s3.object.key;
//Fetch filename from S3
var params = {
Bucket: bucket,
Key: filename
};
//let inputData = await s3.getObject(params).promise()
let inputData = await s3.getObject(params).promise();
//Resize the file
let tempFile = os.tmpdir() '/' uuidv4() '.jpg';
let resizeArgs = {
srcData: inputData.Body,
dstPath: tempFile,
width: 150
};
await resizeAsync(resizeArgs)
//Read the resized File
let resizedData = await readFileAsync(tempFile)
//Upload the resized file to S3
let targetFilename = filename.substring(0, filename.lastIndexOf('.') '-small.jpg')
var params = {
Bucket: bucket '-dest',
Key: targetFilename,
Body: new Buffer(resizedData),
ContentType: 'image/jpeg'
}
await s3.putObject(params).promise();
return await unlinkAsync(tempFile)
})
await Promise.all(filesProcessed)
return "done"
}
Здесь тот же код. Я получаю неожиданную ошибку токена S3 при наведении красной метки (показано на изображении)
Комментарии:
1. Вы уверены в вопросе? Я предполагаю, что возврат не в строковом формате и, следовательно, проблема. Возможно, если вы дадите нам какой-нибудь код вместо скриншота, это поможет нам лучше понять.
2. конечно. Я обновлю код
3. @rey обновлено. пожалуйста, проверьте
Ответ №1:
Что вы можете сделать, это объявить inputData, как показано ниже, и инициализировать его с помощью ответа от GetObject .
let inputData;
var params = {
Bucket: "examplebucket",
Key: "HappyFace.jpg"
};
s3.getObject(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else inputData = data; // successful response
});
Для получения дополнительной информации вы можете обратиться сюда
Комментарии:
1. Я больше не вижу ошибки, но я также не получаю никаких выходных данных. Я поместил console.log() внутрь if и else . А также одна при запуске функции обратного вызова. Ни один из них не отображается в CloudWatch
2. Происходит ли событие? Проверьте имя файла в теле события один раз. Попробуйте обновить вышеуказанное в цикле if, если имя файла существует.
3. Я попытался реализовать указанный вами способ еще раз, и это сработало. Спасибо