Как загрузить файл Multer в виде BLOB-объекта в MySQL? - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь сохранить файл, загруженный на сервер nodejs, в базу данных mysql.Файл загружается и обрабатывается с использованием промежуточного программного обеспечения Multer , в результате чего вся информация о файле сохраняется в req.files.Я верю, поправьте меня, если я ошибаюсь, что эти данные / параметры должны быть каким-то образом преобразованы в формат BLOB-объектов, но я не знаю, как это сделать эффективно.Как это можно сделать, чтобы загрузить его в базу данных MySQL?

Я использую последнюю версию XAMPP с таблицами MySQL InnoDB.Параметры файла / данные, сгенерированные Multer, показаны во фрагменте кода.Я попытался преобразовать весь файл, то есть req.files[0], в большой двоичный объект, хотя большие двоичные объекты, хранящиеся в базе данных MySQL, идентичны по размеру, несмотря на использование разных файлов.

[ { fieldname: 'files',
    originalname: 'Event Information 2018-1_2084.pdf',
    encoding: '7bit',
    mimetype: 'application/pdf',
    destination:
     '/home/millana/Desktop/Brandink/Code/server/middleware/../designs/',
    filename: 'Event Information 2018-1_2084_1559843587360.pdf',
    path:
     '/home/millana/Desktop/Brandink/Code/server/designs/Event Information 2018-1_2084_1559843587360.pdf',
    size: 1125992 } ]

Ниже показан restAPI, который называетсявыполнить запрос к уже существующей таблице Designs и базе данных.

router.post('/order', upload.array('files'), (req, res) => {
    console.log(req.files[0].buffer);

    const order_id = 1;
    const position = 'front';

    const sql = `INSERT INTO Designs VALUES ('${order_id}', '${position}', '${req.files[0].filename}', '${req.files[0].mimetype}', '${req.files[0].buffer}')`;


    db.query(sql, (err, result) => {
        if(err) res.status(400).send(err);
        res.status(200).send(result);
    });

});

Функция промежуточного программного обеспечения включает в себя:

const storage = multer.diskStorage({
    destination: function(req, file, cb) {
        cb(null,  __dirname + '/../designs/');
    },
    filename: function (req, file, cb) {
        let format = '';

        if      ( file.mimetype === 'image/jpeg' )      format = '.jpg';
        else if ( file.mimetype === 'image/png' )       format = '.png';
        else if ( file.mimetype === 'application/pdf' ) format = '.pdf';


        let fileName = _.split(file.originalname, '.')[0] + '_' + Date.now() + format;
        cb(null, fileName);
    }
});

const upload = multer({
    storage: storage,
    limits: {
        fileSize: MAX_SIZE
    },
});

Я ожидаю, что размер большого двоичного объекта будет варьироваться от одного файла к другомупропорционально их размеру файла.Однако размер всех загружаемых файлов составляет 9 байтов, а буферы идентичны, что указывает на то, что один и тот же объект / файл сохраняется.Как я могу хранить каждый отдельный файл соответственно?

...