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