流星 - 访问和显示图像

时间:2015-09-06 15:04:10

标签: javascript meteor collectionfs

您如何访问一个完整图像的文件夹,获取每个图像的网址并将其放入数组中,然后在该数组上{{each}}以在我选择的页面上显示每个图像?每个人都在说CollectionFS,但出于某种原因,当我设置它时:

export DYLD_LIBRARY_PATH=/.../placesharelibs/:$DYLD_LIBRARY_PATH

我可以在控制台中访问图像,但是数组是空的。这不是我需要做的全部吗?

2 个答案:

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