You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.6 KiB
JavaScript
106 lines
2.6 KiB
JavaScript
"use strict";
|
|
|
|
var fs = require('fs');
|
|
var nconf = require('nconf');
|
|
var path = require('path');
|
|
var winston = require('winston');
|
|
var jimp = require('jimp');
|
|
|
|
var utils = require('../public/src/utils');
|
|
|
|
var file = {};
|
|
|
|
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('.');
|
|
|
|
var uploadPath = path.join(nconf.get('base_dir'), nconf.get('upload_path'), folder, filename);
|
|
|
|
winston.verbose('Saving file ' + filename + ' to : ' + uploadPath);
|
|
|
|
var is = fs.createReadStream(tempPath);
|
|
var os = fs.createWriteStream(uploadPath);
|
|
is.on('end', function () {
|
|
callback(null, {
|
|
url: nconf.get('upload_url') + '/' + folder + '/' + filename,
|
|
path: uploadPath
|
|
});
|
|
});
|
|
|
|
os.on('error', callback);
|
|
|
|
is.pipe(os);
|
|
};
|
|
|
|
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) {
|
|
var plugins = require('./plugins');
|
|
if (plugins.hasListeners('filter:file.isFileTypeAllowed')) {
|
|
return plugins.fireHook('filter:file.isFileTypeAllowed', path, function (err) {
|
|
callback(err);
|
|
});
|
|
}
|
|
|
|
// Attempt to read the file, if it passes, file type is allowed
|
|
jimp.read(path, function (err) {
|
|
callback(err);
|
|
});
|
|
};
|
|
|
|
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;
|
|
};
|
|
|
|
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;
|
|
};
|
|
|
|
module.exports = file;
|