2016-01-21 7 views
1

Я использую следующий код для чтения файла изображения, сохраненного в MongoDB используя GridFs:Показать изображения из GridFs (MongoDB)

app.get('/picture', function(req, res) { 

var readstream = gfs.createReadStream({ 
    filename: 'trooper.jpeg' 
}); 

readstream.on('data', function (data) { 
    // We got a buffer of data... 

var buf2 = new Buffer(data).toString('base64'); 
res.send(buf2.toString()) 
console.log(buf2.toString()); 
console.log(data); 
}); 
    readstream.on('end', function() { 
// File finished reading... 
}); 

}); 

Выход console.log (buff.toString()); является:

dHJvb3Blci5qcGVn 

Выход console.log (данных); является:

<Buffer 74 72 6f 6f 70 65 72 2e 6a 70 65 67> 

Чтобы отобразить изображение, я это сделал:

<img src="data:image/jpeg;base64,dHJvb3Blci5qcGVn"> 

Я не могу читать и выводить изображение в формате HTML с GridFs MongoDB

UPDATE:

Я пробовал:

app.get('/picture', function(req, res) { 
res.contentType('image/jpeg'); 
var readstream = gfs.createReadStream('trooper.jpeg'); 
readstream.pipe(res); 

}); 

Выход вышеперечисленное:

enter image description here

ответ

1

Если вам действительно не нужно вставлять изображения в страницу, используйте трубы как ответ saintedlama.

dHJvb3Blci5qcGVn является кодировкой base64 "trooper.jpeg". Убедитесь, что вы правильно сохранили двоичные данные в GridFS в первом экземпляре.

Вы можете query it directly и проверить содержимое файла, хранящегося в db.

+0

Большое вам спасибо за ваш ответ. Я не уверен, правильно ли я сохранил его. Я разместил этот вопрос, который содержит код для загрузки файла вместе с изображениями. Не могли бы вы посмотреть http://stackoverflow.com/questions/34904157/reading-and-displaying-images-from-mongodb-using-gridfs – Skywalker

+0

Да, вы сохранили имя файла, а не двоичную полезную нагрузку. Я ответил. –

0

Вы можете просто конвейеру GridFS чтения потока в ответ без буферизации:

app.get('/picture', function(req, res) { 
    // Set correct content type first 
    res.contentType('image/png'); 

    fs 
    .createReadStream('/tmp/Disneygoofy2012.jpeg') 
    .pipe(res); 
}); 

Я думаю, проблема вашей буферизацией решение заключалось в том, что вы передаете только первый пакет байтов, который вы получаете от GridFS до res.send.

+0

Сначала я хотел сказать огромное спасибо за то, чтобы ответить на мой вопрос и помочь мне. Я внес изменения, которые вы предложили. Я совершенно уверен, что делаю это неправильно. Пожалуйста, ознакомьтесь с обновленным вопросом для моих изменений и вывода. Если вы можете помочь мне решить, это будет потрясающе, поскольку я застрял в этом несколько дней. Еще раз спасибо. – Skywalker

0
var Grid = require("gridfs-stream"); 
Grid.mongo = mongo; 

router.get("/:filename", function(req, res){ 
     gfs = Grid(db); 
     var readstream = gfs.createReadStream({filename: req.params.filename}); 
     readstream.on("error", function(err){ 
      res.send("No image found with that title"); 
     }); 
     readstream.pipe(res); 
    }); 

Это идеальное решение, чтобы получить изображения с gridfs

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