流星收集fs插入服务器端 [英] Meteor collectionfs insert server side

查看:53
本文介绍了流星收集fs插入服务器端的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,我使用collectionfs + gridfs + cfs文件系统, 在collectionfs文档中,我发现如何在客户端插入文件,如下所示:

hi everyone i using collectionfs + gridfs + cfs filesystem, on collectionfs documentation i find how to insert file on client side like this :

Template.myForm.events({
  'change .myFileInput': function(event, template) {
    FS.Utility.eachFile(event, function(file) {
      Images.insert(file, function (err, fileObj) {
        //Inserted new doc with ID fileObj._id, and kicked off the data upload using HTTP
      });
    });
  }
});

在这种情况下,

将在客户端插入文件,但是在我的情况下,我删除了不安全的文件,因此无法在客户端插入,我尝试在服务器端进行插入.所以这是我的代码:

on that case will insert file on client side, but in my case i remove insecure, so can't do insert on client side, i try to make it on server side . so this is my code :

Template.myForm.events({
    'change . myFileInput': function (event, template) {
        FS.Utility.eachFile(event, function (file) {
            var reader = new FileReader();
            reader.onload = function (fileLoadEvent) {
                Meteor.call('ImageUpload', file, reader.result, function (err, res) {
                    if (err) {
                        console.log(err);
                    } else {
                        alert(res);
                    }
                });
            };
            reader.readAsBinaryString(file);


        });
    }
});

server.js:

server.js :

Meteor.methods({
    ImageUpload: function (fileInfo, fileData) {
        console.log(fileInfo);
        Images.insert(fileInfo, fileData, function (err, fileObj) {
            if (err) console.log(err)
            else {
                //Inserted new doc with ID fileObj._id, and kicked off the data upload using HTTP
                console.log(fileObj);
                return fileObj._id;
            }
        });
    }
});

,但仍然无法正常工作,请帮助我解决此问题. 如何在服务器端插入?

but it still doesn't work, please help me how to fix this. how to insert on server side?

推荐答案

适合您的示例.我没有测试它,但是它显示了您必须走的路.

An example for you. I didnt tested it but it shows the way you have to go.

首先定义一个集合:

我认为您已经很清楚这一步.

I think this step is already clear to you.

var postImagesStoreFS = new FS.Store.FileSystem("postImages", {
  path: "~/workspace/uploads/"
});

Add添加了一些过滤器.万一您需要类似的东西.

Add added some filters. Just in case you need something like that.

PostImages = new FS.Collection('postImages', {
  stores: [postImagesStoreFS ],
  filter: {
  maxSize: 3145728,
  allow: {
    contentTypes: ['image/*'],
    extensions: ['png', 'PNG', 'jpg', 'JPG', 'jpeg', 'JPEG']
  }
});

现在,您可以在相同的* .js文件中定义allow和deny函数.如果删除不安全的软件包,则所有插入/更新/删除操作都必须通过允许/拒绝功能.如果命令传递了al​​low回调,则可以将其插入到您的集合中(如果没有使它无效的deny函数)

Now you can define in the same *.js file your allow and deny functions. If you remove the insecure package all inserts/updates/removes have to pass allow/deny functions. If a command passes the allow callback it can be inserted into your collection (If there is no deny function that invalidates it)

在此示例中,我只想插入一个图像,如果有一个用户,并且该图像的元数据用户是该用户本身.您必须自行设置元数据用户.对于测试,只需在每个allow函数中返回true,如Pent示例所示.查看流星文档以了解有关allow/deny的更多信息 http://docs.meteor.com/#allow

Well in this example i just like to insert an image if there is a user and if the metadata user of the image is the user itself. You have to set the metadata user on your own. For testing just return true in every allow function, like shown in the example of Pent. Check the meteor documentation to read more about allow/deny http://docs.meteor.com/#allow

PostImages.allow({
  insert: function(userId, doc) {
    return (userId && doc.metadata.owner === userId);
  },
  update: function(userId, doc, fieldNames, modifier) {
    return (userId === doc.metadata.owner);
  },
  remove: function(userId, doc) {
    return false;
  },
  download: function(userId) {
    return !!userId;
  }
});

客户端模板应如您所发布的那样工作.万一您想使用一些元数据,我添加了一个更大的示例.

The client template should work as you posted. Just in case you want to use some metadata i added a bigger example.

Template.myForm.events({
  'change .myFileInput': function(event, template) {
    FS.Utility.eachFile(event, function(file) {
      var fsFile = new FS.File(file);
      fsFile.metadata = {owner: Meteor.userId()};
      Images.insert(fsFile, function (err, fileObj) {

      });
    });
  }
});

这应该是您需要的一切.

This should be everything you need to have.

这篇关于流星收集fs插入服务器端的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆