San*_*oon 5 javascript schema image mongodb express
我正在使用Express,Node.js和Mongodb创建上传和显示图像文件的网页。
我使用模式将图像的二进制文件保存在mongodb中。
这是我在index.js和db.js中的少量代码。
var Post = mongoose.Schema({
image: {data: Buffer, contentType: String}
});
var post= new Post({ });
post.image.data=fs.readFileSync(req.file.path);
post.image.contentType='image/png';
Run Code Online (Sandbox Code Playgroud)
这是我提交图像文件并搜索帖子后,mongo shell的一部分及其图像字段
"image: {"data:BinData(0,"iVBORw0KGgoAAAANSUhEUE....(I
just cut off the rest of the code.. cuz it was too long)
rkJggg=="),
"contentType" : "image/png" }
Run Code Online (Sandbox Code Playgroud)
因此似乎已成功将图像文件的二进制数据保存在mogngodb中,
但是我的问题是现在如何使用二进制数据在网页上显示图像。如何转换二进制缓冲区数据以创建图像标签?
<img src= "data:{{image.contentType}};base64,{{image.data}}">
Run Code Online (Sandbox Code Playgroud)
我试过了,但这给了我一个错误:
Failed to load resource: net::ERR_INVALID_URL
Run Code Online (Sandbox Code Playgroud)
你们能告诉我如何解决这个问题吗?我将非常感谢您的帮助:(((
首先,您必须将缓冲区数据转换为 Base64。您可以在后端或前端进行,这并不重要。只需使用yourBufferData.toString('base64')
. 然后就可以使用它了。
但是,我建议使用另一种方法来存储图像而不是存储二进制数据。假设你使用nodejs。您可以使用该方法在存储库中使用该二进制数据创建图像fs.writeFile
。然后您可以将该图像路径存储在记录(db)中。之后,只需将文件路径放入ng-src =“您保存的文件路径”即可。这是我使用的示例:
var path = 'upload/profiles/' +req.body.userId + '_profile.jpg';
fs.writeFile(path, base64data, function(err) {
if (err) return next(err);
User.findByIdAndUpdate({
_id: req.body.userId
}, {
$set: {
profileImg: 'upload/profiles/' +req.body.userId + '_profile.jpg'
}
}, function(err, user) {
if (err) return next(err);
return res.send(user);
});
});
<img ng-src="savedpath">
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6507 次 |
最近记录: |