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

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

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

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

  • _id
  • length
  • chunksize
  • uploadDate
  • md5
  • contentType

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

  • _id
  • length
  • chunksize
  • uploadDate
  • md5
  • contentType
  • описание
  • категория и остальные

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

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 Ответ

0 голосов
/ 30 ноября 2018

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

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

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

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

...