| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | var mime = Npm.require('mime');var fs = Npm.require("fs");/** * @method DataMan.FilePath * @public * @constructor * @param {String} filepath * @param {String} [type] The data content (MIME) type. Will lookup from file if not passed. */DataMan.FilePath = function DataManFilePath(filepath, type) {  var self = this;  self.filepath = filepath;  self._type = type || mime.lookup(filepath);};/** * @method DataMan.FilePath.prototype.getBuffer * @private * @param {function} callback callback(err, buffer) * @returns {Buffer|undefined} * * Passes a Buffer representing the data to a callback. */DataMan.FilePath.prototype.getBuffer = function dataManFilePathGetBuffer(callback) {  var self = this;  // Call node readFile  fs.readFile(self.filepath, Meteor.bindEnvironment(function(err, buffer) {    callback(err, buffer);  }, function(err) {    callback(err);  }));};/** * @method DataMan.FilePath.prototype.getDataUri * @private * @param {function} callback callback(err, dataUri) * * Passes a data URI representing the data to a callback. */DataMan.FilePath.prototype.getDataUri = function dataManFilePathGetDataUri(callback) {  var self = this;  self.getBuffer(function (error, buffer) {    if (error) {      callback(error);    } else {      if (!self._type) {        callback(new Error("DataMan.getDataUri couldn't get a contentType"));      } else {        var dataUri = "data:" + self._type + ";base64," + buffer.toString("base64");        buffer = null;        callback(null, dataUri);      }    }  });};/** * @method DataMan.FilePath.prototype.createReadStream * @private * * Returns a read stream for the data. */DataMan.FilePath.prototype.createReadStream = function dataManFilePathCreateReadStream() {  // Stream from filesystem  return fs.createReadStream(this.filepath);};/** * @method DataMan.FilePath.prototype.size * @param {function} callback callback(err, size) * @private * * Passes the size in bytes of the data to a callback. */DataMan.FilePath.prototype.size = function dataManFilePathSize(callback) {  var self = this;  if (typeof self._size === "number") {    callback(null, self._size);    return;  }  // We can get the size without buffering  fs.stat(self.filepath, Meteor.bindEnvironment(function (error, stats) {    if (stats && typeof stats.size === "number") {      self._size = stats.size;      callback(null, self._size);    } else {      callback(error);    }  }, function (error) {    callback(error);  }));};/** * @method DataMan.FilePath.prototype.type * @private * * Returns the type of the data. */DataMan.FilePath.prototype.type = function dataManFilePathType() {  return this._type;};
 |