Completed Image Editor
This commit is contained in:
@@ -6,6 +6,7 @@ const path = require('path'),
|
||||
multer = require('multer'),
|
||||
request = require('request'),
|
||||
url = require('url'),
|
||||
farmhash = require('farmhash'),
|
||||
_ = require('lodash');
|
||||
|
||||
var regFolderName = new RegExp("^[a-z0-9][a-z0-9\-]*[a-z0-9]$");
|
||||
@@ -231,6 +232,78 @@ module.exports = {
|
||||
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Move/Rename a file
|
||||
*
|
||||
* @param {String} uid The file ID
|
||||
* @param {String} fld The destination folder
|
||||
* @param {String} nFilename The new filename (optional)
|
||||
* @return {Promise} Promise of the operation
|
||||
*/
|
||||
moveUploadsFile(uid, fld, nFilename) {
|
||||
|
||||
let self = this;
|
||||
|
||||
return db.UplFolder.findById('f:' + fld).then((folder) => {
|
||||
if(folder) {
|
||||
return db.UplFile.findById(uid).then((originFile) => {
|
||||
|
||||
//-> Check if rename is valid
|
||||
|
||||
let nameCheck = null;
|
||||
if(nFilename) {
|
||||
let originFileObj = path.parse(originFile.filename);
|
||||
nameCheck = lcdata.validateUploadsFilename(nFilename + originFileObj.ext, folder.name);
|
||||
} else {
|
||||
nameCheck = Promise.resolve(originFile.filename);
|
||||
}
|
||||
|
||||
return nameCheck.then((destFilename) => {
|
||||
|
||||
let originFolder = (originFile.folder && originFile.folder !== 'f:') ? originFile.folder.slice(2) : './';
|
||||
let sourceFilePath = path.resolve(self._uploadsPath, originFolder, originFile.filename);
|
||||
let destFilePath = path.resolve(self._uploadsPath, folder.name, destFilename);
|
||||
let preMoveOps = [];
|
||||
|
||||
//-> Check for invalid operations
|
||||
|
||||
if(sourceFilePath === destFilePath) {
|
||||
return Promise.reject(new Error('Invalid Operation!'));
|
||||
}
|
||||
|
||||
//-> Delete DB entry
|
||||
|
||||
preMoveOps.push(db.UplFile.findByIdAndRemove(uid));
|
||||
|
||||
//-> Move thumbnail ahead to avoid re-generation
|
||||
|
||||
if(originFile.category === 'image') {
|
||||
let fUid = farmhash.fingerprint32(folder.name + '/' + destFilename);
|
||||
let sourceThumbPath = path.resolve(self._uploadsThumbsPath, originFile._id + '.png');
|
||||
let destThumbPath = path.resolve(self._uploadsThumbsPath, fUid + '.png');
|
||||
preMoveOps.push(fs.moveAsync(sourceThumbPath, destThumbPath));
|
||||
} else {
|
||||
preMoveOps.push(Promise.resolve(true));
|
||||
}
|
||||
|
||||
//-> Proceed to move actual file
|
||||
|
||||
return Promise.all(preMoveOps).then(() => {
|
||||
return fs.moveAsync(sourceFilePath, destFilePath, {
|
||||
clobber: false
|
||||
});
|
||||
});
|
||||
|
||||
})
|
||||
|
||||
});
|
||||
} else {
|
||||
return Promise.reject(new Error('Invalid Destination Folder'));
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
};
|
Reference in New Issue
Block a user