我有一个Meteor应用程序,我想上传一个文本文件,然后在服务器上解析该文件。我正在使用cfs:gridfs
(当然使用cfs:standard-package
)将文件存储在服务器上。
客户代码:
Template.uploadPathway.events({
"submit #upload-pathway": function (event) {
event.preventDefault(); // prevent default browser form submit
var pathwayFile = event.target.pathwayFile.files[0];
UploadedFiles.insert(pathwayFile, function(error, fileObject) {
// error handling removed for brevity
Meteor.call("parseFile", fileObject._id);
});
}
});
服务器代码(在服务器文件夹中,而不是Meteor.isServer):
Meteor.methods({
parseFile: function (fileId) {
var theFile = UploadedFiles.findOne({ _id: fileId });
console.log(theFile);
// how do I parse this file??
}
});
上面的代码很漂亮,但我不知道如何读取FS内部的数据。文件
答案 0 :(得分:0)
Eric Dobbertin's回答我的问题:
首先,请注意当
insert
回调在客户端上触发时, 文件可能还没有完成上传,即使它已经存在 上传后,可能无法存储到数据存储中。所以打电话给你insert
回调中的方法不是一种好方法。如果您需要在方法中执行此操作,因为您想要读取数据 并将一些东西发回客户端,然后你可以设置一个 您等待
autorun
的{{1}}功能 是fileObj.hasStored(storeName)
。然后你可以调用方法并停止自动运行 计算。 (link to hasStored documentation)尝试类似的东西,然后查看您的代码是否有效。取决于 你究竟要对数据做些什么,可能会有一些 更好的方法来代替“数据”事件处理程序。
如果客户不需要参与,那么更简单的方法 存储每个文件后触发代码是使用"存储" 商店里的听众:
true