Nodejsのfsを使う

カテゴリー:Meteor 作成日:2015年2月3日21:53

Node.jsで使われているfsを使うには

サーバー側でしか動かないかも?

後で検証したい。

// collectionの宣言
Fsmdfiles = new Meteor.Collection('testdata');

//fsの宣言
var fs = Npm.require('fs');

//カレントディレクトリーの/public/data/から読み取る。
var filePath = process.env.PWD + '/public/data/';
// 読み取った複数のファイル
var file_list = fs.readdirSync(filePath);
for(var i= 0, file; file=file_list[i]; i++){
if(file != null){

      Fsmdfiles.insert({
        cdate: new Date(), // 今の日付
        filename: file,    // ファイルの名前
        textfile: fs.readFileSync(filePath + file, "utf-8") // 読み取ったデータ
      });

  }  
}

html5のFileReaderを使う場合

uploadtext.html

<head>
    <title>uploadtext<title>
<head>
<body>
    <h1>Welcome to Meteor!<h1>

     {{> upload</span}}
<body>

<template name="upload">
      <div>
          < input type="file" name="files[]" id="read_button" >
         {{#each mdtext}}
              <p><textarea id="textarea_id" rows="10" cols="70">{{textfile}}< /textarea><p>
              <p>{{#markdown}} {{textfile}} {{/markdown}}<p>
    // マークダウンを使った。 meteor add markdownでOK
        {{/each}}
    </div>
</template>

uploadtext.js テキストファイルの場合

MdFiles = new Meteor.Collection('mdfiles');


if (Meteor.isClient) {
  Meteor.subscribe('mdtext');

  Template.upload.helpers({
    mdtext: function(){
      return MdFiles.find({}, {sort: {cdate: -1}});
    }
  });

  Template.upload.events({
    'change #read_button': function (event) {
      var files = event.target.files;
      for (var i = 0, f; f = files[i]; i++) {
        if (f.type.match('text.*')) {
          var reader = new FileReader();
          reader.onload = function (efile) {
            var cdate = new Date();
            var filename = efile.name;
            var filesize = efile.size;
            var textfile = reader.result;
            Meteor.call('insertText',
                cdate, filename, filesize, textfile, function (error, result) {
                }
            );
          }
          reader.readAsText(f, 'utf-8');
        }
      }
    }
  });


}

if (Meteor.isServer) {
  Meteor.startup(function () {
    // code to run on server at startup
});

  Meteor.methods({
    insertText: function(cdate,filename,filesize,textfile) {
      return MdFiles.insert({
        cdate: cdate,
        filename: filename,
        filesize: filesize,
        textfile: textfile
      });
    }
  });

  Meteor.publish("mdtext", function () {
    return MdFiles.find({}, {sort: {cdate: -1}});
  });

}

イメージファイルの場合

uploadtext.html の<input type="file" name="files[]" id="read_button" />
を
<input type="file" name="files[]" id="read_button" multiple/>
へmultipleを追加
PhoteImg = new Meteor.Collection('photeimagesTest');

if (Meteor.isClient) {
  // counter starts at 0
  //Session.setDefault("counter", 0);

  Template.photeread.files = function(){
      return PhoteImg.find({},{sort: {cdate: -1}});
  }

  Template.photeinput.events({
      'change #files': function (evt) {
        var files = evt.target.files;
        for (var i=0, f; f=files[i]; i++){
            if (!f.type.match('image.*')) {
                continue;
            }

            var reader = new FileReader();
            reader.onload = (function(theFile){
                return function(e){
                  PhoteImg.insert(
                      { cdate: new Date(),
                        filename: theFile.name,
                        filetype: theFile.type,
                        filesize: theFile.size/1000,
                        filedate: theFile.lastModifiedDate.toLocaleDateString(),
                        fileimage: e.target.result,
                      }
                  )    
                }

            })(f);
            // Read in the image file as a data URL.
            reader.readAsDataURL(f);
        }
    }
  });
}

if (Meteor.isServer) {
    Meteor.startup(function () {
        // code to run on server at startup
    });
}