mirror of
https://github.com/wekan/wekan.git
synced 2025-04-24 22:17:16 -04:00
108 lines
2.7 KiB
JavaScript
108 lines
2.7 KiB
JavaScript
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;
|
|
};
|