CollectionFS

但是,如果你真的非常重視儲存,並且想要儲存數百萬個影象,那麼你將需要利用 Mongo 的 GridFS 基礎架構,並建立自己的儲存層。為此,你將需要優秀的 CollectionFS 子系統。

首先新增必要的包。

meteor add cfs:standard-packages
meteor add cfs:filesystem

並將檔案上傳元素新增到物件模型中。

<template name="yourTemplate">
    <input class="your-upload-class" type="file">
</template>

然後在客戶端上新增一個事件控制器。

Template.yourTemplate.events({
    'change .your-upload-class': function(event, template) {
        FS.Utility.eachFile(event, `function(file)` {
            var yourFile = new FS.File(file);
            yourFile.creatorId = Meteor.userId(); // add custom data
            YourFileCollection.insert(yourFile, function (err, fileObj) {
                if (!err) {
                   // do callback stuff
                }
            });
        });
    }
});

並在你的伺服器上定義你的集合:

YourFileCollection = new FS.Collection("yourFileCollection", {
    stores: [new FS.Store.FileSystem("yourFileCollection", {path: "~/meteor_uploads"})]
});
YourFileCollection.allow({
    insert: function (userId, doc) {
        return !!userId;
    },
    update: function (userId, doc) {
        return doc.creatorId == userId
    },
    download: function (userId, doc) {
        return doc.creatorId == userId
    }
});

感謝 Raz 這個出色的例子。你需要檢視完整的 CollectionFS 文件,以獲取有關所有 CollectionFS 可以執行的操作的更多詳細資訊。