#javascript #node.js #json #amazon-s3 #aws-lambda
Вопрос:
Привет, у меня есть ответ json, вероятно, размером 150-200 МБ. Из-за его размера я хочу сохранить его на aws s3 в виде файла json вместо того, чтобы возвращать его клиенту. Ниже приведен код, который я использую в настоящее время.
async function uploadFileOnS3(fileData, s3Detail) {
const params = {
Bucket: s3Detail.Bucket,
Key: s3Detail.Key_response,
Body: JSON.stringify(fileData), // big fat js object
};
try {
const stored = await S3.upload(params).promise();
console.log("file uploaded Sucessfully ", stored);
} catch (err) {
console.log(err);
}
console.log("upload exit");
}
Меня беспокоит операция JSON.stringify(файловые данные). предполагая, что эта функция будет частью aws lambda, не потребуется ли огромных ресурсов для ее анализа в виде строки?
существует ли какой-либо другой эффективный способ сохранить объект javascript в виде json в корзине aws s3?
Ответ №1:
На самом деле вам не нужно структурировать файл JSON. Вы можете передать поток как тело:
async function uploadFileOnS3(fileData, s3Detail) {
const params = {
Bucket: s3Detail.Bucket,
Key: s3Detail.Key_response,
Body: fileData, // remove stringify from here
};
try {
const stored = await S3.upload(params).promise();
console.log("file uploaded Sucessfully ", stored);
} catch (err) {
console.log(err);
}
console.log("upload exit");
}
exports.handler = async (event) => {
// We create a stream
const stream = fs.createReadStream("/tmp/upload.json");
// Pass the stream to the upload function
await uploadFileOnS3(stream, {
Bucket: "bucket_name",
Key_response: "upload.json"
});
}