2014-12-08 5 views
8

Bu konu hakkında epeyce konu olduğunu biliyorum, ancak maalesef şu ana kadar cevabımı bulamadım. İstemciden görüntü almak için angular.js'yi http://angular-js.in/image-upload/ örnek kodla birlikte kullanıyorum.Görüntüyü mongoose ile kaydetme

var userSchema = new mongoose.Schema({ 
    avatar: { data: Buffer, contentType: String }, 
    // ... 
}); 

module.exports = mongoose.model('User', userSchema); 

ve benim düğüm kodu:

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) {/* ... */ }); 

ve benim angularCtrl:

var foo = { 
    image: image, 
    imageName: image.name, 
}; 

$http.post('/api/users', {data: foo }) 
    .success(function (result) { 
    /*...*/}); 

Bu bölüm düğümü/mongodb kısmına Şimdi

çalışır, işte arka uç modeli Req.body.data.image'in yanı sıra req.body.data.image.dataURL, req.body.data.image.dat gibi birçok farklı varyasyon denedim. aURL.data, ama hiçbir şey şimdiye kadar işe yaramadı. req.body.data.image Benim Günlüğü gösterir:

{ 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..... 

nasıl veritabanına görüntüyü kaydedebilirsiniz ? hala

var split = req.body.data.image.dataURL.split('base64,'); 
var type = split[0]; 
var data = split[1]; 

var avatar = { 
    data: type, 
    contentType:'image/png' 
}; 

kaydetmek mesajı: düzenlemek

böyle avatar içine req.body.data.image.dataURL den base64, sonra her şeyi kurtarmaya çalıştı

user.avatar = avatar 
user.save(function (err, user) {} 

Ama hala olsun hata TypeError: Cannot set property 'avatar' of null

Sorumun beri
+0

böylece Mongo'da içine Blob veri depolamak istediğinizde veya sunucudaki görüntünün sadece yol? – Ravi

+0

Blogu mongo – Markus

+0

hmmm içine kaydetmek istiyorum, dosya verileri 'req.files' nesnesinde olabilir. Ve mongo'da ikili verileri depolamak için ['GridFS'] 'e (http://www.mongodb.org/display/DOCS/GridFS) başvurun. – Ravi

cevap