Image upload process + right-click menu UI
This commit is contained in:
		| @@ -2,7 +2,13 @@ | ||||
|  | ||||
| var express = require('express'); | ||||
| var router = express.Router(); | ||||
| var _ = require('lodash'); | ||||
|  | ||||
| var readChunk = require('read-chunk'), | ||||
| 		fileType = require('file-type'), | ||||
| 		Promise = require('bluebird'), | ||||
| 		fs = Promise.promisifyAll(require('fs-extra')), | ||||
| 		path = require('path'), | ||||
| 		_ = require('lodash'); | ||||
|  | ||||
| var validPathRe = new RegExp("^([a-z0-9\\/-]+\\.[a-z0-9]+)$"); | ||||
| var validPathThumbsRe = new RegExp("^([0-9]+\\.png)$"); | ||||
| @@ -31,6 +37,54 @@ router.get('/t/*', (req, res, next) => { | ||||
|  | ||||
| }); | ||||
|  | ||||
| router.post('/img', lcdata.uploadImgHandler, (req, res, next) => { | ||||
|  | ||||
| 	let destFolder = _.chain(req.body.folder).trim().toLower().value(); | ||||
| 	let destFolderPath = lcdata.validateUploadsFolder(destFolder); | ||||
|  | ||||
| 	Promise.map(req.files, (f) => { | ||||
|  | ||||
| 		let destFilename = ''; | ||||
| 		let destFilePath = ''; | ||||
|  | ||||
| 		return lcdata.validateUploadsFilename(f.originalname, destFolder).then((fname) => { | ||||
| 			 | ||||
| 			destFilename = fname; | ||||
| 			destFilePath = path.resolve(destFolderPath, destFilename); | ||||
|  | ||||
| 			return readChunk(f.path, 0, 262); | ||||
|  | ||||
| 		}).then((buf) => { | ||||
|  | ||||
| 			//-> Check MIME type by magic number | ||||
|  | ||||
| 			let mimeInfo = fileType(buf); | ||||
| 			if(!_.includes(['image/png', 'image/jpeg', 'image/gif', 'image/webp'], mimeInfo.mime)) { | ||||
| 				return Promise.reject(new Error('Invalid file type.')); | ||||
| 			} | ||||
| 			return true; | ||||
|  | ||||
| 		}).then(() => { | ||||
|  | ||||
| 			//-> Move file to final destination | ||||
|  | ||||
| 			return fs.moveAsync(f.path, destFilePath, { clobber: false }); | ||||
|  | ||||
| 		}).then(() => { | ||||
| 			return { | ||||
| 				filename: destFilename, | ||||
| 				filesize: f.size | ||||
| 			}; | ||||
| 		}); | ||||
|  | ||||
| 	}, {concurrency: 3}).then((results) => { | ||||
| 		res.json({ ok: true, results }); | ||||
| 	}).catch((err) => { | ||||
| 		res.json({ ok: false, msg: err.message }); | ||||
| 	}); | ||||
|  | ||||
| }); | ||||
|  | ||||
| router.get('/*', (req, res, next) => { | ||||
|  | ||||
| 	let fileName = req.params[0]; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user