【发布时间】:2015-02-05 20:01:12
【问题描述】:
我知道已经有很多关于这个主题的主题,但不幸的是我直到现在才找到答案。我使用 angular.js 和来自http://angular-js.in/image-upload/ 的示例代码从客户端获取图像。这部分有效
现在到 node/mongodb 部分,这是我的后端模型:
var userSchema = new mongoose.Schema({
avatar: { data: Buffer, contentType: String },
// ...
});
module.exports = mongoose.model('User', userSchema);
和我的节点代码:
exports.createAvatar = function (req, res) {
var avatar = {
data: req.body.data.image, // see below
contentType: 'image/png'
}
models.DUser
.findById(index.findUserId(req))
.exec(function (err, user) {
user.avatar = avatar;
// ...
user.save(function (err, user) {/* ... */ });
还有我的 angularCtrl:
var foo = {
image: image,
imageName: image.name,
};
$http.post('/api/users', {data: foo })
.success(function (result) { /*...*/ });
除了 req.body.data.image 我尝试了许多不同的变体,例如 req.body.data.image.dataURL、req.body.data.image.dataURL.data,但到目前为止没有任何效果。我的 req.body.data.image 记录显示:
{ file:
{ webkitRelativePath: '',
lastModified: 1411073963000,
lastModifiedDate: '2014-09-18T20:59:23.000Z',
name: '3770316278.png',
type: 'image/png',
size: 32493 },
url: 'blob:http%3A//127.0.0.1%3A3000/cb20debc-8a3a-468f-ab5c-39299f7ec52b',
dataURL: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACHCAYAAAC.....
如何将图像保存到数据库中?
编辑
我尝试将base64, 之后的所有内容从req.body.data.image.dataURL 保存到头像中,如下所示:
var split = req.body.data.image.dataURL.split('base64,');
var type = split[0];
var data = split[1];
var avatar = {
data: type,
contentType:'image/png'
};
保存消息还在:
user.avatar = avatar
user.save(function (err, user) {}
但我仍然得到错误
TypeError: 无法设置属性 'avatar' of null
由于我的问题发生了一些变化,我将这个问题标记为已解决,新问题在这里:Displaying Images in Angular.js from MongoDB
【问题讨论】:
-
所以你想将 Blob 数据存储到 mongo 中,还是只是图像在服务器上的路径?
-
我想将 blob 存储到 mongo 中
-
嗯,文件数据可能在您的
req.files对象中。并参考GridFS在mongo中存储二进制数据。 -
看起来 dataURL 字段有以 base64 编码的图像数据。如果要存储图片数据,只要存储
data:image/png;base64,之后的内容,就是base64编码的png。 -
在您的
EDIT中,用户对象是null。如错误中所述。
标签: javascript angularjs node.js mongodb mongoose