Files
NodeBB/src/file.js

98 lines
2.3 KiB
JavaScript
Raw Normal View History

2014-04-17 13:11:53 -04:00
"use strict";
2014-02-13 20:43:19 -05:00
var fs = require('fs'),
nconf = require('nconf'),
path = require('path'),
2015-02-18 21:09:33 -05:00
winston = require('winston'),
jimp = require('jimp'),
2015-02-18 21:09:33 -05:00
utils = require('../public/src/utils');
2014-02-13 20:43:19 -05:00
var file = {};
2014-10-08 13:46:36 -04:00
file.saveFileToLocal = function(filename, folder, tempPath, callback) {
/*
* remarkable doesn't allow spaces in hyperlinks, once that's fixed, remove this.
*/
filename = filename.split('.');
filename.forEach(function(name, idx) {
filename[idx] = utils.slugify(name);
});
filename = filename.join('.');
2014-04-17 13:22:03 -04:00
2014-10-08 13:46:36 -04:00
var uploadPath = path.join(nconf.get('base_dir'), nconf.get('upload_path'), folder, filename);
2014-02-13 20:43:19 -05:00
2015-02-18 21:09:33 -05:00
winston.verbose('Saving file '+ filename +' to : ' + uploadPath);
2014-02-13 20:43:19 -05:00
var is = fs.createReadStream(tempPath);
var os = fs.createWriteStream(uploadPath);
is.on('end', function () {
callback(null, {
url: nconf.get('upload_url') + folder + '/' + filename
2014-02-13 20:43:19 -05:00
});
});
os.on('error', callback);
2014-02-13 20:43:19 -05:00
is.pipe(os);
2014-04-17 13:11:53 -04:00
};
2014-02-13 20:43:19 -05:00
file.base64ToLocal = function(imageData, uploadPath, callback) {
var buffer = new Buffer(imageData.slice(imageData.indexOf('base64') + 7), 'base64');
uploadPath = path.join(nconf.get('base_dir'), nconf.get('upload_path'), uploadPath);
fs.writeFile(uploadPath, buffer, {
encoding: 'base64'
}, function(err) {
callback(err, uploadPath);
});
};
file.isFileTypeAllowed = function(path, callback) {
// Attempt to read the file, if it passes, file type is allowed
jimp.read(path, function(err) {
2016-03-08 19:01:45 +02:00
callback(err);
});
2015-02-18 21:09:33 -05:00
};
file.allowedExtensions = function() {
var meta = require('./meta');
var allowedExtensions = (meta.config.allowedFileExtensions || '').trim();
if (!allowedExtensions) {
return [];
}
allowedExtensions = allowedExtensions.split(',');
allowedExtensions = allowedExtensions.filter(Boolean).map(function(extension) {
extension = extension.trim();
if (!extension.startsWith('.')) {
extension = '.' + extension;
}
return extension;
});
if (allowedExtensions.indexOf('.jpg') !== -1 && allowedExtensions.indexOf('.jpeg') === -1) {
allowedExtensions.push('.jpeg');
}
return allowedExtensions;
};
2015-09-29 18:22:41 -04:00
file.exists = function(path, callback) {
fs.stat(path, function(err, stat) {
callback(!err && stat);
});
};
file.existsSync = function(path) {
var exists = false;
try {
exists = fs.statSync(path);
} catch(err) {
exists = false;
}
return !!exists;
};
2014-04-17 13:22:03 -04:00
module.exports = file;