2016-03-02 3 views
0

Я работаю над веб-приложением, разработанным со стеком MEAN. Мне нужно хранить файлы в mongoDB без вызова GridFs, так как это позже имеет слабость с небольшими файлами, я провел много исследований, но всегда нашел GridFS.хранить файлы в mongoDB withour GridFS

+0

Вы можете использовать GridFS только для больших файлов и что-то еще (непосредственно вставлять в документ?) Для маленьких файлов. – Thilo

ответ

1

MongoDB имеет Binary type. Это очень проста в использовании:

var fs = require('fs'); 

var mongo = require('mongodb'); 
var MongoClient = mongo.MongoClient; 
var Binary = mongo.Binary; 

// Connection url 
var url = 'mongodb://localhost:27017/test'; 

// Connect using MongoClient 
MongoClient.connect(url).then(function (db) { 
    var collection = db.collection('bins'); 

    return collection.insert({ 
     name: 'image2', 
     // the constructor takes a Buffer 
     bin: new Binary(fs.readFileSync(__dirname + '/img.jpg')) 
    }).then(function() { 
     console.log('inserted'); 
     db.close(); 
    }).catch(function (err) { 
     console.log(err); 
    }); 
}); 

Получить сохраненный файл:

MongoClient.connect(url).then(function (db) { 
    var collection = db.collection('bins'); 

    return collection.findOne({ name: 'image2' }).then(function (doc) { 
     console.log(doc); 

     fs.writeFileSync(__dirname + '/out.jpg', doc.bin.buffer); 

     db.close(); 
    }) 
}); 

Использование бинарного типа может быть неявным. Это позволит создать бинарное поле тоже:

collection.insert({ 
    name: 'image2', 
    bin: fs.readFileSync(__dirname + '/img.jpg') 
}) 

Имейте в виду, что MongoDB документы имеют 16MB total size limit.

+0

Внимание! убедитесь, что общий размер документа не превышает 16 МБ. Это жесткое ограничение MongoDB, так что на всякий случай. – Saleem

+0

@Saleem Конечно, но OP, похоже, знает об этом пределе, он/она отбрасывал GridFS из-за слабости небольшими файлами *. – Shanoor

+0

Согласен. Люди с различным опытом посещают переполнение стека для поиска решения, и часто они неправильно читают, не реализуя компромиссы. Тем не менее, у вас есть хорошее решение с лучшим объяснением, поэтому большие пальцы! – Saleem

Смежные вопросы