我使用Meteor和CollectionFS来允许用户存储图像。我希望每个用户只能存储一个图像,如果他上传第二个图像,则应覆盖第一个图像。
在客户端,我使用帮助函数上传文件:
"change #imageInput": FS.EventHandlers.insertFiles(Images, {
metadata: function (fileObj) {
return {
owner: Meteor.userId()
};
},
after: function (error, fileObj) {
}
});
服务器端:
Images = new FS.Collection("images", {
stores: [
new FS.Store.FileSystem("thumbs", {
transformWrite: function(fileObj, readStream, writeStream) {
// Transform the image into a 10x10px thumbnail
gm(readStream, fileObj.name()).resize('125', '125').stream().pipe(writeStream);
}
})
],
});
Images.allow({
insert: function (userId, file) {
return userId && file.owner === userId;
},
update: function (userId, file, fields, modifier) {
return userId && file.owner === userId;
},
remove: function (userId, file) {
return userId && file.owner === userId;
},
download: function(userId, file) {
return true;
}
})
当上传新图像时,应删除{owner:Meteor.userId()}的所有图像。我的问题是这个地方放在哪里?我还没有找到在服务器端插入像afterWrite这样的钩子的方法。