我发现你的问题很有趣,所以我开始考虑一种方法。我对 Meteor 和 Node.js 还很陌生,所以我想有更好理解的人可以提出更好的解决方案,但我的基本想法是将每个图像从目录导入到 CollectionFS。
这是我想出的(注意,这是一个 10 分钟的模型,而不是复制粘贴解决方案!)
var basedir = '../../../../../public/';
var imageStore = new FS.Store.FileSystem("images", {
path: basedir
});
Images = new FS.Collection("images", {
stores: [imageStore]
});
if (Meteor.isServer) {
Images.allow({
'insert': function () {
return true;
},
'download' : function(){
return true;
}
});
function importFiles(importDir) {
var dir = basedir + importDir;
var files = fs.readdirSync(dir);
_(files).each(function(f){
fs.readFile(dir + f, Meteor.bindEnvironment(function (err, data) {
if (err) throw err;
var newFile = new FS.File();
newFile.attachData(data, {type: 'image/png'});
newFile.name(f);
var insertedFile = Images.insert(newFile,function(err,fob){
if (err) throw err;
console.log('Uploaded successfully');
});
}));
})
}
importFiles('import/'); // this dir in under my public folder
}
此代码将 public/import 中的所有内容导入到为imageStore
. 但是要小心,这可能会导致严重的内存问题,因为它正在读取整个文件fs.readFile
您需要安装 Node.js fs 库meteor add peerlibrary:fs
例如,不要忘记过滤文件列表并根据扩展名设置正确的 MIME 类型。
导入图像后,您可以使用 CollectionFS find()`` to list the images and then
fileObject.url()``` 来显示它们。
CollectionFS GitHub 页面上有示例,例如:
https ://github.com/CollectionFS/Meteor-CollectionFS/#url