如何使用cfs:filesystem和collectionfs保存到Meteor中的/ public?

时间:2015-07-17 08:49:23

标签: meteor collectionfs

/lib/collections/images.js

var imageStore = new FS.Store.FileSystem("images", {
  // what should the path be if I want to save to /public/assets?
  // this does not work
  path: "/assets/images/", 
  maxTries: 1
});

Images = new FS.Collection("images", {
  stores: [imageStore]
});

Images.deny({
  insert: function() {
    return false;
  },
  update: function() {
    return false;
  },
  remove: function() {
    return false;
  },
  download: function() {
    return false;
  }
});

Images.allow({
  insert: function() {
    return true;
  },
  update: function() {
    return true;
  },
  remove: function() {
    return true;
  },
  download: function() {
    return true;
  }
});

/client/test.html

<template name="test">

    <input type="file" name="myFileInput" class="myFileInput">

</template>

/client/test.js

Template.test.events({

  'change .myFileInput': function(event, template) {
    FS.Utility.eachFile(event, function(file) {
      Images.insert(file, function (err, fileObj) {
        if (err){
           // handle error
        } else {
           // handle success
        }
      });
    });
  },

});

对于路径,如果我使用:

path: "/public/assets/images",

错误:EACCES,权限被拒绝'/ public'

path: "/assets/images",

错误:EACCES,权限被拒绝'/ assets'

path: "~/assets/images",

这样可行,但它会将图像保存到我的Linux计算机上/home/assets/images。该路径根本不与Meteor项目相关。

3 个答案:

答案 0 :(得分:7)

我已使用meteor-root软件包解决了这个问题: https://atmospherejs.com/ostrio/meteor-root

Files = new FS.Collection("files", {
    stores: [new FS.Store.FileSystem("images", {path: Meteor.absolutePath + '/public/uploads'})]
});

所以现在它将文件存储在app / public / uploads /

希望这有帮助!

答案 1 :(得分:5)

/不代表您网站的根目录。 /代表系统的根目录。流星应用程序以您的用户身份运行。

你想要做的是使用相对路径。可能无法从apps根目录执行collectionFS fs.write操作。因此,您也可以使用path: process.env.PWD + '/public/assets/images'

答案 2 :(得分:0)

您可以使用

 var homeDir = process.env.HOMEPATH;
 tmpDir: homeDir + '/uploads/tmp'