Я пытаюсь изменить размеры изображений до 4 различных размеров, а затем загрузить их в AWS S3 bucket с помощью Nodejs, загружая (вставляя / обновляя) информацию о продукте и сохраняя ее в Mongodb. Вставка не так уж и сложна, это может быть сделано просто, но когда дело доходит до обновления, я сталкиваюсь с трудностью управления новыми изображениями и удаления старых. Каков наилучший способ управления файлами изображений (изменение размера в 3 различных размера, затем сохранение, замена новыми и удаление старых) при загрузке (создании / обновлении) информации о продукте с использованием Nodejs, Mongodb и AWS S3?
Продукт Модель:
module.exports = mongoose.model('Product', new mongoose.Schema({
name: String,
price: Number,
category: Number,
stock: [{
title: String,
value: String,
image: String,
count: Number
},
],
short_desc: String,
long_desc: String,
images:[
String
]
}));
Код, который у меня пока есть:
const addProduct = async ({name, price, category, stock, short_desc, long_desc, images}, ctx)=>{
let pics = [];
for(let i = 0; i < images.length; i++){
let _file = images[i];
const { createReadStream, filename, mimetype } = await _file;
let mime = mimetype.split('/')
if(mime[0]!=='image'){
throw new Error('mimeTypeFailed')
}
const stream = createReadStream()
await uploadToS3(stream, filename)
.then(res=>{
let uri_arr = res.split("amazonaws.com/");
res = "https://daqwlzhso9sq7.cloudfront.net/"+uri_arr[1];
pics.push(res);
})
}
for(let i = 0; i < stock.length; i++){
if (stock[i].image) {
let _file = stock[i].image;
stock[i].image = "";
const { createReadStream, filename, mimetype } = await _file;
let mime = mimetype.split('/')
if(mime[0]!=='image'){
throw new Error('mimeTypeFailed')
}
const stream = createReadStream()
await uploadToS3(stream, filename)
.then(res=>{
let uri_arr = res.split("amazonaws.com/");
res = "https://daqwlzhto9aq7.cloudfront.net/"+uri_arr[1];
stock[i].image = res;
})
}
}
let newProduct = await Product({
name: name,
price: price,
category: category,
stock: stock,
short_desc: short_desc,
long_desc: long_desc,
images: pics
}).save()
if(!newProduct){
throw new Error("addProductFailed");
}
}