Получить расположение нескольких изображений в базе данных mongodb
Я пытаюсь загрузить несколько файлов из моего приложения NodeJs в базу данных MongoDB с помощью Multer. Но проблема в том, что когда я сохраняю местоположение файла в своей базе данных, сохраняется только одно местоположение файла, а другие игнорируются. Это происходит потому, что в моей функции я сохраняю только 1-й элемент массива, используя req.files[0].location. Мне нужен обходной путь, чтобы создать цикл и сохранить все расположения файлов вместо жесткого кодирования позиции элемента массива в req.files. Мне нужно сохранить файлы как
"imagePath": [ { "small": "https://mean-ecom.s3.ap-south-1.amazonaws.com/1592947173797", "big": "https://mean-ecom.s3.ap-south-1.amazonaws.com/1592947173797" }, { "small": "https://mean-ecom.s3.ap-south-1.amazonaws.com/1592947173799", "big": "https://mean-ecom.s3.ap-south-1.amazonaws.com/1592947173799" }, { "small": "https://mean-ecom.s3.ap-south-1.amazonaws.com/1592947173711", "big": "https://mean-ecom.s3.ap-south-1.amazonaws.com/1592947173711" }
Ниже приведена моя функция. Мне нужна помощь с моделью и сохранением нескольких местоположений imagePath указанным выше способом. Любая помощь будет оценена по достоинству!
Что я уже пробовал:
route.js
const ProductController = require('./../controllers/productController'); const appConfig = require("./../config/appConfig"); const multer = require('multer'); const aws = require('aws-sdk'); const multerS3 = require('multer-s3'); const path = require('path'); const s3 = new aws.S3({ accessKeyId: "***", secretAccessKey: "***" }); var upload = multer({ storage: multerS3({ s3: s3, bucket: 'mean-ecom', metadata: function (req, file, cb) { cb(null, {fieldName: file.originalname + path.extname(file.fieldname)}); }, key: function (req, file, cb) { cb(null, Date.now().toString())}})}); let setRouter = (app) => { let baseUrl = appConfig.apiVersion; app.post(baseUrl+'/post-product', upload.any('imagePath'), ProductController.postProduct)} module.exports = { setRouter: setRouter}
Productcontroller в.postProduct:
const ProductModel = mongoose.model('Product') let postProduct = (req, res) => { let newProduct = new ProductModel({ imagePath: req.file[0].location}) newProduct.save((err, result) => { if (err) { console.log('Error at saving new Product :: ProductController', err); res.send(err); } else { console.log('Successfully saved new Product'); res.send(result) } })}
productModel.js:
const mongoose = require('mongoose'); const Schema = mongoose.Schema; let productSchema = new Schema( { imagePath: { type: String, default: '' }}) mongoose.model('Product', productSchema);
Richard MacCutchan
Я не вижу строки кода, которая ссылается на req.files[0].location
Но все, что вам нужно, это что-то вроде:
for (int i = 0; i < number_of_files; ++i) { copy(req.files[i].location, destination[i]) // or whatever required code }