Meteor: upload image file using FileReader on the client and Npm.require ("fs") on the server

I am having trouble uploading an image file to my public / folder using a standard item <input type="file">.

So I have this event :

      "change .logoBusinessBig-upload":function(event, template){

            var reader = new FileReader()

            reader.addEventListener("load", function(){

                Meteor.call("saveFile", reader.result)

            })

            reader.readAsArrayBuffer(event.currentTarget.files[0])

        }

When I do console.log (reader.result) inside the eventListeners callback, I get an ArrayBuffer object.

In my server / server.js file, I have this Meteor.method :

        saveFile:function(file){

            var fs = Npm.require("fs")

            fs.writeFile('message.jpg', file, function (err) {

                console.log("file saved")

            });

        }

However, the file is not saved, and the console never says "file saved." What am I doing wrong here?

+4
source share
2

//client.js

'change .logoBusinessBig-upload': function(event, template) {

    var file = event.target.files[0]; //assuming you have only 1 file
    if (!file) return;

    var reader = new FileReader(); //create a reader according to HTML5 File API

    reader.onload = function(event){          
      var buffer = new Uint8Array(reader.result) // convert to binary
      Meteor.call('saveFile',buffer);
    }

    reader.readAsArrayBuffer(file); //read the file as arraybuffer
}

//server.js

'saveFile': function(buffer){
    var fs = Npm.require("fs");
    fs.writeFile('/location',new Buffer(buffer),function(error){...});

}

ArrayBuffer, DDP , Uint8Array, Meteor.call

, (), . "/Location" , , , TmpDir

+7

, 'fs' - nodejs. : var fs = require('fs')

0

All Articles