2014-12-08 193 views
8

我知道這個話題已經有不少線索了,但不幸的是我直到現在才找到答案。我使用來自http://angular-js.in/image-upload/的示例代碼中的angular.js從客戶端獲取圖像。這部分工作用貓鼬保存圖片

現在到了節點/ 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.dat aURL.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..... 

如何將圖像保存到數據庫?

編輯

我試圖從req.body.data.image.dataURLbase64,後保存到一切頭像是這樣的:

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: Cannot set property 'avatar' of null

+0

所以要BLOB數據存儲到蒙戈,或者在服務器上的圖像的人的路? – Ravi 2014-12-08 08:00:13

+0

我想將blob存入mongo – Markus 2014-12-08 08:06:39

+0

hmmm,文件數據可能在你的'req.files'對象中。並且參考['GridFS'](http://www.mongodb.org/display/DOCS/GridFS)在mongo中存儲二進制數據。 – Ravi 2014-12-08 08:24:20

回答