text: 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;
  };
  