Multer gridfs Хранение - PullRequest
       78

Multer gridfs Хранение

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

Я хотел изменить свое имя файла, но когда я проверяю console.log (req.file), я вижу имя файла, на которое я изменился, но другое имя файла сохраняется в базе данных, используя Multergridfs Storage.

 1. the default filename 
 const storage = new GridFsStorage({
    url: config.db,
    file: (req, file) => {
        return new Promise((resolve, reject) => {
            crypto.randomBytes(16, (err, buf) => {
                if (err) {
                    return reject(err)
                }
                const filename = 'file' + path.extname(file.originalname);
                const fileInfo = {
                    filename: filename,
                    bucketName: 'contents'
                };
                resolve(fileInfo);
            });
        });
    }});

2 this is where i edited the filename

router.post('/', upload.single('file'), (req, res) => {
    req.file.filename = req.body.fileName + path.extname(req.file.originalname)
    res.redirect('/upload/files')
    
    console.log(req.file)
});

результат консоли выглядит примерно так:

{fieldname: 'file', originalname: '\' ВЫ МОЖЕТЕ ТАКЖЕ БЫТЬ БОЛЬШИМ \'- Элон Маск Мотивация - Мотивационный Video.mp4', кодировка: '7bit', mimetype: 'video / mp4', id: 5bfb292c13eec142f6c20fd9, имя файла: 'a.mp4', метаданные: null, bucketName: 'contents', chunkSize:261120, размер: 19372377, md5: '513c6220ef3afff644cf8a6dc4cd9130', uploadDate: 2018-11-25T22: 58: 52.625Z, contentType: 'video / mp4'} {fileName: 'a'}

1 Ответ

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

Эта часть в вашем коде

const storage = new GridFsStorage({
    url: config.db,
    file: (req, file) => { // In this function is where you configure the name of your file

Конфигурация file - это та, которая вычисляет имя файла перед вставкой файла в базу данных.Что вы делаете:

  1. Создание имени, например 'file' плюс любое расширение, полученное из браузера, например: 'file.mp4'
  2. Сохранение файла с этим именем в базе данных
  3. Перезапись свойства в вашем запросе новым именем
  4. Файл в базе данных остается неизменным

Я думаю, что вы действительно хотели создать правильное имя перед вставкой

Это можно сделать с помощью

const storage = new GridFsStorage({
    url: config.db,
    file: (req, file) => {
        return new Promise((resolve, reject) => {
            crypto.randomBytes(16, (err, buf) => {
                if (err) {
                    return reject(err)
                }
                // In here you have access to the request and also to the body object
                const filename = req.body.fileName + path.extname(file.originalname);
                const fileInfo = {
                    filename: filename,
                    bucketName: 'contents'
                };
                resolve(fileInfo);
            });
        });
    }});

Убедитесь, что вы отправили все поля до того, как файл из формы в вашем браузере или некоторые значения будутundefined потому что они еще не обработаны.

...