2014-01-10 8 views
6

나는 Meteor 앱을 가지고 있고 (csv에서) 유성우 컬렉션으로 데이터를 업로드하고 싶습니다.Meteor/Mongo DB에 데이터 업로드

나는 발견했다 : 쉘에서 기본 몽고의 DB에 uploading directl Y에 대한

  • 방법 유성 라우터에
  • 참조 파일 업로드 처리 (예를 들어 Collectionfs)

    • 솔루션 -하지만 내가 이 기능을 제공하지 않는 우수한 iron-router을 사용하십시오.

    내 요구 사항은 우리가 내 앱에서 CSV 데이터를 앱에 업로드 할 수 있어야합니다. 앱 파일 구조 내에서 CSV 파일을 저장할 필요가 없습니다. 컬렉션에 대한 csv 데이터를 읽어야합니다.

    참조 조건 ('유성으로 데이터 업로드')이 모호하거나 잘못 되었기 때문에이를 수행하는 방법을 이해할 수 없습니다. 또는 나는 바보입니다.

  • +0

    바로 데이터를 클라이언트의 컬렉션에 삽입하면 유성이 서버에 '업로드'할 수 있습니다. 이것이 내 대답에서하고있는 일이다. –

    답변

    2

    이 코드와 함께 this gist of mine을 사용하여이 문제를 해결했습니다 (CSV 데이터를 구문 분석하는 데 jquery-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 
    }); 
    

    은 조심하지만 당신이 항목을 많이 삽입하는 경우, 당신은 돌려 더 나을 모든 반응 모두가 삽입 될 때까지 잠시 동안 떨어져 다시 렌더링. 그렇지 않으면 서버와 브라우저 탭의 노드가 모두 느려집니다. 내 제안 솔루션을 여기를 참조하십시오 : Meteor's subscription and sync are slow

    +0

    이것은 스포트 온입니다. 나는이 대답을 받아 들였지만 실제로 사용한 코드를 포함했다. 많은 감사합니다. –

    6

    ChristianF's answer에 자리하고 있으며 나는 정답으로 받아 들였습니다. 그러나 나는이 단계에서 필요한 것 이상을 제공합니다. 그래서 저는 실제로 사용한 코드를 여기에 포함 시켰습니다. 결과적으로 크리스천의 대답과 다른 요소로부터 대부분 가져 왔습니다.

    HTML 업로드 버튼

    <template name="upload"> 
        <input type="file" id="files" name="files[]" multiple /> 
        <output id="list"></output> 
    </template> 
    

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

    NB (나는이 단계에서 드래그 앤 드롭을 포함하고 있지 않다)은 기상 관측을위한 JQuery와-CSV 라이브러리가 여기에 : https://github.com/donskifarrell/meteor-jquery-csv