2013-12-20 101 views
0

說實話,我對緩衝區和類似的東西有點無知,所以我可能會說廢話,但卻與我無關。但是我正在從AFNetworking獲取一個PNG文件,並將其保存到GridFS,然後我希望能夠在某個時刻對其進行檢索。出於好奇我記錄的圖像之前它進入GridFS的,它看起來像..圖片不能在Node.js中使用GridFS顯示服務圖像

<89504e47 0d0a1a0a 0000000d 49484452 00000074 0000008c 08020000 0022391a ...> 

我把它保存在一個緩衝區,然後將其保存到GridFS的。

當我通過GET請求檢索它時,我在再次將其發送出去之前將其記錄下來,並且它顯示爲相同的格式。 後來我試圖做到這一點

res.writeHead(200, {'Content-Type': 'image/png' }); 
gs.createReadStream(image).pipe(res); //using GridJS this it the syntax to read 

當它只是看起來像一個空或損壞的圖片鏈接瀏覽器中查看這一點。如果我檢查網頁的源文件它似乎只是

如果我從來沒有設置它只是出現在標題爲數百

<89504e47 0d0a1a0a 0000000d 49484452 00000074 0000008c 08020000 0022391a ...> 

線我覺得我不是在轉換緩衝權什麼的..我很無知 請指點我正確的方向。

回答

0
var http = require('http'), 
    MongoDB = require("mongodb"), 
    MongoClient = require("mongodb").MongoClient, 
    GridStore = require("mongodb").GridStore; 

http.createServer(function (req, res) { 
    console.log("Serving request for file: " + req.url); 
    MongoClient.connect("mongodb://localhost:27017/test", {}, function(err, db) { 
     gridStore = new GridStore(db, req.url, "r"); 
     gridStore.open(function(err, gs) { 
      if (err) { 
       console.log("error in open: " + err); 
       return; 
      } 

      res.writeHead(200, {'Content-Type': 'image/png'}); 
      var s = gs.stream(true); 
      s.pipe(res); 
     }); 
    }); 

}).listen(8124, "127.0.0.1"); 

console.log('Server running at http://127.0.0.1:8124/'); 

我可以使用上面粘貼的代碼成功運行服務器併成功將png文件提供給瀏覽器。然而,既然你說當你做一個「查看源代碼」時,源代碼的原始內容確實出現在客戶端。我會建議嘗試我寫的代碼,看看是否有相同的問題。