2014-10-10 88 views
0

檢索圖像,我使用GridFS的,所以我有我的monDB:從MongoDB的

fs.chunks: 

{ 
     "_id" : ObjectId("542e684a8a1cec178a172673"), 
     "n" : 1, 
     "data" : BinData(0,"2N6DSSfbCN/LLacNDYrJUQDEZgimMUwFpQGoJP0RU19Bi4PM82DjrUnKhE/P9v7P8ZveD1oDpFBM0iml9NE3WQmAvYFoG+nhD73Jm4N9b4LpylaAN5Ef+gVdgGSTAfSUwOikXoVick5pSQCkRmTCU5NT9VVfjHdAx74/ZhFRj+TIRjzlAhzkACBElzgMwGCo7tX+FYrpQLJ5KRmXiwFFwsNtHHzXiK1eu+CG1FumhGpA/qdG8CdDgD1xUHEcerMGO/eLGR9ML7ni/VjXxWzqp2j5DG2/WuKNv7xd3Kz/vr0MctJhuaBIl35YrKhdLnzqDa0uDa6bm4jz+eNyAI2hQbayGo4kVPFe8W7wFpY7qfBvnB9kbocxfZSdADDUNwYaydpT8lIcKEN9XfQJOYZvHp0El"), 
     "files_id" : ObjectId("542e684a8a1cec178a172671") 
} 

fs.files: 

{ 
     "_id" : ObjectId("542e65378axdeckhb0"), 
     "uploadDate" : ISODate("2012-11-01"), 
     "length" : 15673, 
     "chunkSize" : 33222, 
     "md5" : "f66e6654854a28e3672cfhds334d223b55a1" 
} 

我做:

var fileId = mongoose.Types.ObjectId(id); 
var gridStore = new GridStore(db, fileId, 'r'); 

gridStore.open(function (err, gridStore) { 
    console.log(gridStore.uploadDate); 
}); 

我:

2012-11-01 

BUT我想顯示圖片 我嘗試類似的東西,但它根本不清楚:

app.get('/data/:imgtag', function(req, res) { 

     fileRepository.getFile(function(error,data) { 
     res.writeHead('200', {'Content-Type': 'image/png'}); 
     res.end(data,'binary'); 
     }, req.params.imgtag 
     ); 
}); 

app.listen(3000); 

感謝您的幫助!

+1

如果您'的console.log(數據)'和結果輸出與'2N6DSSfbCN'那麼你需要改變'res.end開始(數據, '二進制')''來res.end(數據, 'base64')' – mscdex 2014-10-10 18:04:06

+0

感謝您的幫助。但我的問題是做gridstore.open和app.get之間的鏈接 – Carlos 2014-10-11 08:14:38

回答

0

首先,看看GridStore documentation。有兩種方法可以解決這個問題:

一種是在gridStore.open()函數內調用gridStore.read()。您可以將回調數據發送到回覆。

gridStore.read(function(err, data) { 
    res.write(data); 
    res.end(); 
}); 

回調中的數據參數將包含您的文件。

另一種選擇是使用gridStore.stream()並將流傳遞給響應。

gridStore.stream().pipe(res);