mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-01 13:54:35 +03:00
64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
|
var when = require('when'),
|
||
|
path = require('path'),
|
||
|
nodefn = require('when/node'),
|
||
|
fs = require('fs-extra'),
|
||
|
storage = require('../storage'),
|
||
|
errors = require('../errors'),
|
||
|
|
||
|
upload;
|
||
|
|
||
|
|
||
|
|
||
|
function isImage(type, ext) {
|
||
|
if ((type === 'image/jpeg' || type === 'image/png' || type === 'image/gif' || type === 'image/svg+xml')
|
||
|
&& (ext === '.jpg' || ext === '.jpeg' || ext === '.png' || ext === '.gif' || ext === '.svg' || ext === '.svgz')) {
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* ## Upload API Methods
|
||
|
*
|
||
|
* **See:** [API Methods](index.js.html#api%20methods)
|
||
|
*/
|
||
|
upload = {
|
||
|
|
||
|
/**
|
||
|
* ### Add Image
|
||
|
*
|
||
|
* @public
|
||
|
* @param {{context}} options
|
||
|
* @returns {Promise} Success
|
||
|
*/
|
||
|
'add': function (options) {
|
||
|
var store = storage.get_storage(),
|
||
|
type,
|
||
|
ext,
|
||
|
filepath;
|
||
|
|
||
|
if (!options.uploadimage || !options.uploadimage.type || !options.uploadimage.path) {
|
||
|
return when.reject(new errors.NoPermissionError('Please select an image.'));
|
||
|
}
|
||
|
|
||
|
type = options.uploadimage.type;
|
||
|
ext = path.extname(options.uploadimage.name).toLowerCase();
|
||
|
filepath = options.uploadimage.path;
|
||
|
|
||
|
return when(isImage(type, ext)).then(function (result) {
|
||
|
if (!result) {
|
||
|
return when.reject(new errors.UnsupportedMediaTypeError('Please select a valid image.'));
|
||
|
}
|
||
|
}).then(function () {
|
||
|
return store.save(options.uploadimage);
|
||
|
}).then(function (url) {
|
||
|
return when.resolve(url);
|
||
|
}).finally(function () {
|
||
|
// Remove uploaded file from tmp location
|
||
|
return nodefn.call(fs.unlink, filepath);
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
module.exports = upload;
|