2012-08-03 71 views
3

我用BinData類型在mongodb中存儲圖像。用nodejs渲染圖像

我可以用mongojs來查詢數據庫。

db.images.findOne({ 

        file_name: 'temp.jpg', 
        }, 

       function(err, data){ 

       console.log(data.image); // image buffer appears on the console 
       res.writeHead(200, {'Content-Type': 'image/jpg'}); 
       res.end(data.image); 

      }); 

這產生「TypeError:第一個參數必須是字符串或緩衝區」。

我很確定這與緩衝區或編碼有關。 有些人可以在發送給瀏覽器之前解釋我應該如何處理圖像數據嗎?

+0

是在DB拋出的錯誤。 images.findOne行,或在回調函數? – Geuis 2012-08-03 23:19:53

+0

我認爲問題是回調函數中的圖像數據不是「正確的」格式 – jamjam 2012-08-03 23:40:37

+0

您可以在回調中執行「typeof data.image」嗎?我懷疑這個問題是data.image是一個圖像緩衝區,所以它需要被轉換成其他的東西來回送。嘗試將其轉換爲base64,即data.image.toString('base64') – Geuis 2012-08-03 23:54:53

回答

0
  • 設置正確的內容類型
  • 設置正確的內容長度

簡短的例子我是如何從MongoDB中爲我的文件GridFS的

.getFileFromGridFs(doc,function(err, buffer){ 
    if(err) return next(err) 
    res.setHeader('content-type',doc.mimeType) 
    res.setHeader('content-length',doc.size) 
    buffer.pipe(res) 
})