在Meteor中插入图片

时间:2016-03-08 09:06:24

标签: javascript jquery mongodb meteor

我刚开始学习Meteor。我将所有图像放在“/ public”文件夹的根目录中。图像被命名为“1.jpg”,“2.jpg”,“3.jpg”....我想通过使用for循环将所有图像插入到集合“Images”中,而不是将某个数字作为for loop limit。那么如何让它自动检测公共文件夹中有多少图像呢?

1 个答案:

答案 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