Каков наилучший способ управления изображениями при добавлении (создании / обновлении) информации о продукте с помощью nodejs? - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь изменить размеры изображений до 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");
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...