Я пытаюсь загрузить изображение из Ajax в S3 с помощью лямбда-функции AWS, используя узел JS, но изображение становится поврежденным. Мой код выглядит следующим образом.
Клиентская сторона:
var formData = new FormData();
formData.append('file', e.target.files[0]);
formData.append('operation', 'uploadImage');
$.ajax({
type: 'post',
url: 'AWS-API-Gateway-URL-here',
processData: false,
contentType: false,
dataType: 'json',
data: formData
}).done(function (response) {
}.bind(this)).always(function () {
});
Лямбда-код функции ниже в NodeJS:
const getContentType = event => {
const contentType = event.headers["content-type"];
if (!contentType) {
return event.headers["Content-Type"];
}
return contentType;
};
Функция парсера:
const parser = (event) => new Promise((resolve, reject) => {
const busboy = new Busboy({
headers: {
'content-type': getContentType(event)
}
});
const result = {};
busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
file.on('data', data => {
result.file = data;
});
file.on('end', () => {
result.filename = filename;
result.contentType = mimetype;
});
});
busboy.on('field', (fieldname, value) => {
result[fieldname] = value;
});
busboy.on('error', error => reject(error));
busboy.on('finish', () => {
event.body = result;
resolve(event);
});
busboy.write(event.body, event.isBase64Encoded ? 'base64' : 'binary');
busboy.end();
});
Функция загрузки изображения:
const uploadPropertyImage = (buffer, fileName) =>
new Promise((resolve, reject) => {
const bucketName = "BUCKET-NAME";
var filePath = `${fileName}`;
const data = {
Bucket: bucketName,
Key: filePath,
Body: buffer,
ACL: 'public-read',
};
s3.upload(data, (error, data) => {
if (!error) {
resolve(data.Location);
} else {
reject(new Error("error during put"));
}
});
});
Вызов функции парсера из обработчика AWS:
parser(event).then(() => {
var request = event.body;
if (request.operation == "uploadImage") {
uploadPropertyImage(request.file, request.filename)
.then((result) => {
// handles succesfull upload
}).catch(() => {
// error
});
}
});
Мое изображение загружается, но загруженное изображение повреждено. Пожалуйста, помогите.