图像不使用Node.js中的GridFS显示服务图像

时间:2013-12-20 22:30:20

标签: javascript node.js mongodb buffer gridfs

老实说,当谈到缓冲区和那种东西时,我有点无能为力,所以我可能会胡说八道,但对我来说是裸露的。但我从AFNetworking接收一个png文件,将其保存到GridFS,然后我希望能够在某些时候将其恢复。出于好奇,我在进入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   ...>

我觉得我没有正确地转换缓冲区......我无能为力 请指出我正确的方向。

1 个答案:

答案 0 :(得分: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文件提供给浏览器。但是,因为,当您执行“查看源代码”时,您说源的原始内容确实出现在客户端。我建议尝试我编写的代码,看看是否有相同的问题。