检索外部图像并存储在CollectionFS中

时间:2013-10-14 17:53:35

标签: meteor gridfs

好吧,所以我在带有变量路径的特定URL上有一个图像,我想下载它并将其存储在CollectionFS中。如何从响应中获取/创建图像缓冲区?

var request = Npm.require('request').defaults({encoding: null});
request.get(path, function(err, res, body)
    {
        return CollectionFS.storeBuffer(res.request.uri.path, body, { 
    });
});

它似乎成功存储,大小正确。但是,当我尝试查看图像时,它似乎已损坏。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。我对上面的代码有两个问题。首先,当你试图在回调中触摸数据库时,meteor不喜欢它,所以我添加了一个未来等待回调完成。

其次,storeBuffer上的默认编码是utf-8 - 这是图像的问题。将其更改为ascii解决了我的问题。

var Future = Npm.require(“fibers / future”);

    var pre = new Future();
    var preOnComplete = pre.resolver();

    var request = Npm.require('request').defaults({encoding: null});

    request.get(path, function(err, res, body)
    {
        return preOnComplete(err, res, body);
    });

    Future.wait(pre);

    return EventImages.storeBuffer(pre.value.request.href, pre.value.body, { 
        contentType: 'image/jpeg',
        metadata: { eventId: eventId },
        encoding: 'binary'
    });