我正在尝试让CollectionFS在我的应用中存储一些图像。我发现示例应用程序非常擅长展示如何在客户端上使用该程序包,但我完全没有成功尝试如何在启动函数中存储来自服务器的一些初始图像(添加一些虚拟数据到我用于播种数据的各种集合。
我基本上想要从服务器上的公共文件夹中获取图像,然后将其打入集合中,然后像通常在客户端上一样检索它。
有人能指出我正确的方向开始,我想我在这里缺少一些基本的东西。
感谢。
答案 0 :(得分:3)
这是一个有效的小例子。我一步一步做了什么:
1。 Grabbed this示例,添加了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。将Meteor.startup
中的cfsfileurlexample/cfsfileurl-example.js
更改为以下内容:
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. 完成。
每当流星重新启动时,图像都会添加到Images collectionFS并显示在图像列表中。
备注强>
一个hacky事情可能是使用process.env.PWD
来查找项目目录(我首先尝试process.cwd()
但显然它指向其他地方,因为流星0.6.5。)。我在开发和生产模式下进行了测试,但是在捆绑应用程序之后没有进如果你谷歌搜索meteor public folder path
,你会发现其他一些讨论和解决方案。
如果您没有使用fs.readFile
打包传递给Meteor.bindEnvironment
的回调,那么您将获得Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment.