Meteor CollectionFS在服务器上添加图像

Meteor CollectionFS在服务器上添加图像,meteor,Meteor,我正在尝试让CollectionFS在我的应用程序中存储一些图像。我发现示例应用程序非常擅长展示如何在客户端上使用该包,但我在尝试如何在启动函数中存储来自服务器的一些初始图像(将一些虚拟数据添加到我用于设定数据种子的各种集合中)时,绝对没有成功 我基本上希望从服务器上的公用文件夹中获取一个图像,将其输入到集合中,然后像通常在客户机上一样检索它 有人能给我指出一个正确的方向来开始这项工作吗?我想我遗漏了一些基本的东西 谢谢。这里有一个小例子。我一步一步地做了什么: 1。抓取示例,添加collect

我正在尝试让CollectionFS在我的应用程序中存储一些图像。我发现示例应用程序非常擅长展示如何在客户端上使用该包,但我在尝试如何在启动函数中存储来自服务器的一些初始图像(将一些虚拟数据添加到我用于设定数据种子的各种集合中)时,绝对没有成功

我基本上希望从服务器上的公用文件夹中获取一个图像,将其输入到集合中,然后像通常在客户机上一样检索它

有人能给我指出一个正确的方向来开始这项工作吗?我想我遗漏了一些基本的东西


谢谢。

这里有一个小例子。我一步一步地做了什么:

1。抓取示例,添加collectionFS包并更新为Meteor 0.7.0.1:

git clone https://github.com/mxab/cfsfileurl-example.git
cd cfsfileurl-example
mrt add collectionFS
meteor update
2.创建了公用文件夹(
cfsfileurlexample/public/
),并将图像
foo.jpg
复制到其中

3.
cfsfileurleexample/cfsfileurl example.js中的
Meteor.startup
更改为如下:

Meteor.startup(function () {
    var fs = Npm.require('fs');

    fs.readFile(process.env.PWD+'/public/foo.jpg', 
        Meteor.bindEnvironment(function (err, data) {
          if (err) throw err;
            //prints buffer
            //console.log(data);
            Images.storeBuffer('foo.jpg', data, { 
                contentType: 'image/jpg',
                encoding: 'binary'
            });
        },
        function(e){
            throw e;
        }));
});
4.完成

无论何时meteor重新启动,图像都会添加到图像集合中,并显示在图像列表中

注释

有一件黑客行为可能是使用
process.env.PWD
查找项目目录(我第一次尝试
process.cwd()
,但显然它指向meteor 0.6.5之后的其他地方)。我在开发和生产模式下进行了测试,但不是在捆绑应用程序之后。如果你在谷歌上搜索meteor公用文件夹路径,你会发现一些其他的讨论和解决方案


如果不使用
Meteor.bindEnvironment
包装传递给
fs.readFile
的回调,您将得到
错误:Meteor代码必须始终在光纤中运行。尝试使用Meteor.bindEnvironment包装传递给非Meteor库的回调。

我从未尝试过这一点,但我想您会使用
storeBuffer
来完成这一点()。可能与JS
文件阅读器结合使用。你试过了吗?这基本上就是我一直想做的事情(对不起,应该更具体些),但我正在努力弄清楚它是如何在服务器端连接在一起的。任何示例都将不胜感激。进一步查看文档,我想我在“从服务器存储文件”示例中缺少的一点是,如何为磁盘上已经存在的映像创建缓冲区。我想这应该很容易,但这个过程此刻完全暗示了我。我的天哪,托伯德。。那太棒了。你是个救生员。