我刚刚完成了这个解决方案。这个解决方案使用Ajax,所以你可以在Javascript中使用
fetch
调用它。奇怪的是,在整个互联网上都找不到这个解决方案,这就是为什么我把它放在这里,帮助那些想要使用数据URI处理图像的人们 :-)
模型:
cmsImage: { data: Buffer, contentType: String }
MongoDB中的存储:
let rawData = fs.readFileSync(`${root}public/uploads/` + file.originalname);
let base64Data = Buffer.from(rawData).toString('base64');
let image = {
cmsImage: {
data: base64Data,
contentType: file.mimetype
}
};
await this.model.findByIdAndUpdate(body.id, image);
从MongoDB中检索并动态创建图像元素:
let imageArray = new Int8Array(image.data.data);
let decodedImage = new TextDecoder().decode(imageArray);
let cmsImage = document.createElement("img");
cmsImage.src = "data:" + image.contentType + ";base64," + decodedImage;
cmsImage.alt = "image";
cmsContent.appendChild(cmsImage);
Multer - 使用原始文件进行上传到数据库。
let storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './public/uploads')
},
filename: function (req, file, cb) {
cb(null, file.originalname)
}
});
this.upload = multer({ storage: storage });
上传至目录
this.upload.single(uploadImage)
Images
;-) 这很好用,对于这种使用模式,它比GridFS更好。 - mnemosyn