Я пытаюсь сохранить файл, загруженный на сервер 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 байтов, а буферы идентичны, что указывает на то, что один и тот же объект / файл сохраняется.Как я могу хранить каждый отдельный файл соответственно?