逐行读取上传的文件(FS.File,使用cfs:gridfs存储)

时间:2015-07-21 17:50:14

标签: javascript meteor gridfs

我有一个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内部的数据。文件

1 个答案:

答案 0 :(得分:0)

Eric Dobbertin's回答我的问题:

  

首先,请注意当insert回调在客户端上触发时,   文件可能还没有完成上传,即使它已经存在   上传后,可能无法存储到数据存储中。所以打电话给你   insert回调中的方法不是一种好方法。

     

如果您需要在方法中执行此操作,因为您想要读取数据   并将一些东西发回客户端,然后你可以设置一个   您等待autorun的{​​{1}}功能   是fileObj.hasStored(storeName)。然后你可以调用方法并停止自动运行   计算。 (link to hasStored documentation

     

尝试类似的东西,然后查看您的代码是否有效。取决于   你究竟要对数据做些什么,可能会有一些   更好的方法来代替“数据”事件处理程序。

     

如果客户不需要参与,那么更简单的方法   存储每个文件后触发代码是使用"存储"   商店里的听众:

true