您如何访问一个完整图像的文件夹,获取每个图像的网址并将其放入数组中,然后在该数组上{{each}}以在我选择的页面上显示每个图像?每个人都在说CollectionFS,但出于某种原因,当我设置它时:
export DYLD_LIBRARY_PATH=/.../placesharelibs/:$DYLD_LIBRARY_PATH
我可以在控制台中访问图像,但是数组是空的。这不是我需要做的全部吗?
答案 0 :(得分:0)
CollectionFS保留一个mongo集合,该集合实际上指向已存储在某个文件系统中的图像,无论是在服务器磁盘上还是在云中。 afaik,你不能简单地将CollectionFS指向一个充满文件的目录,你需要首先使用CollectionFS将文件放在那里(在你的情况下)Images.insert()
答案 1 :(得分:0)
我发现你的问题非常有趣,所以我开始考虑一种方法。我是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
}
此代码导入从公共/导入到为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