Как добавить новое поле, кроме свойств по умолчанию для multer-gridfs-storage

Я хотел добавить новые поля (объекты), кроме полей по умолчанию для multer-gridfs-storage, но безрезультатно, я хочу добавить следующие поля:

  • Описание
  • категория
  • знак

Поле по умолчанию имеет что-то вроде

  • _Я бы
  • длина
  • chunksize
  • Дата загрузки
  • md5
  • Тип содержимого

вместо этого хочу добавить что-то вроде

  • _Я бы
  • длина
  • chunksize
  • Дата загрузки
  • md5
  • Тип содержимого
  • описание
  • категория и отдых

А также есть способ добавить миниатюру в файл, чтобы у меня не было ссылки на мой идентификатор файла для миниатюры в другой коллекции

const storage = new GridFsStorage({
    url: config.db,
    file: (req, file) => {
        return new Promise((resolve, reject) => {
        
                const filename = req.body.fileName + path.extname(file.originalname);
                const Description = req.body.Description
                const fileInfo = {
                    filename: filename,
                    bucketName: 'contents',
                    metadata: req.body,
                    
                }
                resolve(fileInfo, Description);
            
        });
    }
});
const   upload = multer({
    storage
});
router.get('/', (req, res) => {
    res.render('index');
    console.log(req.body)
});

//** uploading file to the db */

router.post('/', upload.any(), (req, res) => {
    
    
    res.redirect('/upload/files')


});

1 ответ

Решение

Эти свойства заполняются multer и дополнительно расширяются тем механизмом хранилища, который вы используете, в данном случае multer-gridfs-storage при сохранении файла. Вы не сможете манипулировать ими самостоятельно, потому что они генерируются, когда файл анализируется в запросе, а затем, когда он сохраняется в базе данных.

Вместо того, чтобы использовать метаданные для хранения вашей бизнес-логики, вы должны использовать такую ​​среду, как mongoose, и хранить эту информацию в коллекции, а также использовать поле id для получения ссылки на ваш файл. Что-то вроде этого

const Movie = mongoose.model('Movie', { 
    description: String,
    category: String,
    token: String,
    fileId: Schema.Types.ObjectId
});

Прочитайте ваши поля из тела и сохраните их, используя эту коллекцию, в базу данных и используйте автоматически сгенерированные _id вашего файла в качестве fileId, Таким образом, вы можете легко запрашивать ваши данные и при этом иметь доступ к доступному файлу.

Другие вопросы по тегам