将数据上传到Meteor/Mongo DB

Ale*_*ter 6 csv import upload mongodb meteor

我有一个Meteor应用程序,并希望将数据(从csv)上传到流星集合.

我已经找到:

  • 处理文件上传的解决方案(例如Collectionfs)
  • 对于方法上传directl从壳y以底层蒙戈分贝
  • 引用流星路由器 - 但我使用的是优秀的铁路由器,似乎没有提供此功能

我的要求是应用用户能够从应用内将csv数据上传到应用.我不需要将csv文件存储在app文件结构中的任何位置,我只需要将csv数据读取到集合中.

我可能无法弄清楚如何执行此操作,因为我的参考条款("将数据上传到meteor")不明确或不正确.或者说我是个白痴.

Ale*_*ter 6

ChristianF的回答是正确的,我接受了它作为正确的答案.但是,它在这个阶段提供的东西比我需要的还要多,所以我在这里包含了我实际使用的代码 - 这主要取自Christian的答案以及我发现的其他元素:

HTML UPLOAD BUTTON(我不包括此阶段的拖放)

<template name="upload">
  <input type="file" id="files" name="files[]" multiple />
  <output id="list"></output>
</template>
Run Code Online (Sandbox Code Playgroud)

JAVASCRIPT

Template.upload.events({
  "change #files": function (e) {
    var files = e.target.files || e.dataTransfer.files;
    for (var i = 0, file; file = files[i]; i++) {
      if (file.type.indexOf("text") == 0) {
        var reader = new FileReader();
        reader.onloadend = function (e) {
          var text = e.target.result;
          console.log(text)
          var all = $.csv.toObjects(text);
          console.log(all)
          _.each(all, function (entry) {
            Members.insert(entry);
          });
        }
        reader.readAsText(file);
      }
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

注意,这里有一个针对Meteor的jquery-csv库:https://github.com/donskifarrell/meteor-jquery-csv


Chr*_*itz 2

我过去使用我的要点以及此代码(使用jquery-csv插件解析 csv 数据)解决了这个问题。这是在客户端完成的,与是否使用iron-router无关。将插入代码移至 Meteor 方法中相当简单,首先上传 csv 文件,然后在服务器上解析和插入数据。我也尝试过,但没有看到任何性能改进。

$(document).ready(function() {
    var dd = new dragAndDrop({
        onComplete: function(files) {
            for (var i = 0; i < files.length; i++) {
                // Only process csv files.
                if (!f.type.match('text/csv')) {
                    continue;
                }
                var reader = new FileReader();
                reader.onloadend = function(event) {
                    var all = $.csv.toObjects(event.target.result);
                    // do something with file content
                    _.each(all, function(entry) { 
                         Items.insert(entry);
                    });
                }
             }
        }
     });

     dd.add('upload-div'); // add to an existing div, turning it into a drop container
});
Run Code Online (Sandbox Code Playgroud)

但请注意,如果您要插入大量条目,那么最好暂时关闭所有反应式重新渲染,直到所有条目都插入为止。否则,服务器上的节点和浏览器选项卡都会变得非常慢。请参阅我建议的解决方案:Meteor 的订阅和同步速度很慢