gpt4 book ai didi

javascript - Meteor collectionfs 插入服务器端

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:33:53 25 4
gpt4 key购买 nike

大家好,我使用 collectionfs + gridfs + cfs 文件系统,在 collectionfs 文档中,我找到了如何像这样在客户端插入文件:

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
});
});
}
});

在那种情况下会在客户端插入文件,但在我的情况下我删除了不安全的,所以不能在客户端插入,我尝试在服务器端插入。所以这是我的代码:

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);


});
}
});

服务器.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;
}
});
}
});

但是还是不行,求大神指教。服务器端如何插入?

最佳答案

举个例子。我没有测试它,但它显示了你必须走的路。

首先定义一个集合:

我想这一步你已经很清楚了。

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

添加添加了一些过滤器。以防万一您需要类似的东西。

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

现在您可以在同一个 *.js 文件中定义允许和拒绝功能。如果删除不安全的包,所有插入/更新/删除都必须通过允许/拒绝功能。如果命令通过允许回调,它可以插入到您的集合中(如果没有拒绝函数使其无效)

好吧,在这个例子中,如果有用户并且图像的元数据用户是用户本身,我只想插入图像。您必须自己设置元数据用户。对于测试,只需在每个 allow 函数中返回 true,如 Pent 的示例所示。查看 meteor 文档以阅读有关允许/拒绝的更多信息 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;
}
});

客户端模板应该像您发布的那样工作。为了以防万一你想使用一些元数据,我添加了一个更大的例子。

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) {

});
});
}
});

这应该是您需要的一切。

关于javascript - Meteor collectionfs 插入服务器端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23044259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com