我正在尝试将上传到nodejs服务器的文件存储到mysql数据库中。使用Multer中间件上传和处理文件,从而将所有文件信息存储在req.files
中。我相信,如果我弄错了,请纠正我,此数据/参数必须以某种方式转换为Blob格式,但我不知道如何有效地执行。如何将其上传到MySQL数据库中?
我正在将XAMPP的最新版本与MySQL InnoDB表一起使用。 Multer生成的文件参数/数据显示在代码片段中。我试图将整个文件req.files[0]
转换为blob,尽管使用了不同的文件,但存储在MySQL数据库中的blob的大小相同。
[ { 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
},
});
我希望Blob的大小根据文件大小成比例地从一个文件到另一个文件。但是,在缓冲区相同的情况下,所有上载的文件的大小为9个字节,表示正在存储相同的对象/文件。如何存储每个不同的文件?
答案 0 :(得分:0)
如何使用fileFilter?您可以管理文件的质量或大小等。 https://github.com/expressjs/multer
正如您在链接或知识中所看到的,multer具有一些选项,例如fileFilter或limit。 fileFilter与您的功能类似,用于选择文件类型。 限制
fileSize:{ 5 * 1024 * 1024 }
我听说存储像image这样的文件是为了在缓冲区中转换二进制文件。
如果您使用console.log(img文件),则可以看到如下输出 二进制{ _bsontype:“二进制”, 子类型:0, 位置:260547, 缓冲区:}}
然后将数组缓冲区更改为base64,字符串。
结果是,
数据:image / jpeg; base64,v9emlk3SGF45fg ...
它与“文件名或原始名称”不同,
因此可以将其另存为一个