我刚开始学习Meteor。我将所有图像放在“/ public”文件夹的根目录中。图像被命名为“1.jpg”,“2.jpg”,“3.jpg”....我想通过使用for循环将所有图像插入到集合“Images”中,而不是将某个数字作为for loop limit。那么如何让它自动检测公共文件夹中有多少图像呢?
答案 0 :(得分:0)
您需要一种机制来获取公共文件夹中的图像列表,使用fs
包将为您执行此操作。请考虑以下示例,该示例使用该包从服务器读取公共目录/web.browser/app/
(总unix路径/home/user/your_app_name/.meteor/local/build/programs/web.browser/app/
)。
获取文件夹列表后,过滤列表以仅获取扩展名为.jpg
的图像文件,然后将图像插入到集合中。出于说明目的,保存到集合的图像文档具有以下简单的模式示例
{ _id: "v2PrCTPea6tM6JNHn", name: "1.jpg" }
为了帮助您实现将图像插入mongo集合的最终目标,您可以使用batch-insert Meteor软件包,使基础mongo驱动程序能够插入多个文档。它就像insert()
一样工作,但是要插入一个对象数组而不是单个对象。
<强> #Installation 强>
在meteor app目录中运行:
meteor add mikowals:batch-insert
在服务器上
var fs = Npm.require('fs'),
public_path = path.join(__meteor_bootstrap__.serverDir, "../web.browser/app"),
files = fs.readdirSync(public_path),
images = _(files).reject( function(fileName) {
return fileName.indexOf('.jpg') < 0;
}),
imagesList = images.map(function (image){
return { name: image };
});
Images = new Meteor.Collection('images');
Images.allow({
insert: function(){ return true };
});
var newIds = Images.batchInsert(imagesList); // returns array of created _id values