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