gpt4 book ai didi

mysql - 如何在 MySQL 中将 multer 文件作为 blob 上传?

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:46 25 4
gpt4 key购买 nike

我正在尝试将上传到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 字节,而缓冲区是相同的,这表明正在存储相同的对象/文件。如何相应地存储每个不同的文件?

最佳答案

使用文件过滤器怎么样?您可以管理文件的质量或大小等。 https://github.com/expressjs/multer

正如您在链接或您的知识中看到的那样,multer 有一些选项,例如文件过滤器或限制。fileFilter,与您的功能类似,用于选择文件类型。限制,

文件大小:{ 5*1024*1024}

而且我听说存储图像等文件就是将二进制文件转换为缓冲区中的二进制文件。

如果你console.log(img file),你可以看到如下输出二进制{ _bsontype: '二进制', 子类型:0, 位置:260547, 缓冲区: } }

然后将数组Buffer更改为base64,字符串。结果是,
数据:图像/jpeg;base64,v9emlk3SGF45fg...

它与“文件名或originalName”不同,

这样它就可以另存为另一个。

关于mysql - 如何在 MySQL 中将 multer 文件作为 blob 上传?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56483286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com