diff --git a/index.js b/index.js index 0ebaf48..c5089f5 100644 --- a/index.js +++ b/index.js @@ -47,8 +47,8 @@ JqueryFileUploadMiddleware.prototype.configure = function (options) { this.options = this.prepareOptions(options); }; -JqueryFileUploadMiddleware.prototype.fileHandler = function (options) { - return require('./lib/filehandler')(this, this.prepareOptions(_.extend(this.options, options))); +JqueryFileUploadMiddleware.prototype.fileHandler = function (options, callback) { + return require('./lib/filehandler')(this, this.prepareOptions(_.extend(this.options, options)), callback); }; JqueryFileUploadMiddleware.prototype.fileManager = function (options) { diff --git a/lib/filehandler.js b/lib/filehandler.js index 3b6b625..c8a6c5e 100644 --- a/lib/filehandler.js +++ b/lib/filehandler.js @@ -1,4 +1,4 @@ -module.exports = function (middleware, options) { +module.exports = function (middleware, options, callback) { return function (req, res, next) { res.set({ @@ -7,7 +7,9 @@ module.exports = function (middleware, options) { }); var UploadHandler = require('./uploadhandler')(options); var handler = new UploadHandler(req, res, function (result, redirect) { - if (redirect) { + if (callback) { + callback(result, req, res, next); + } else if (redirect) { files = {files: result}; res.redirect(redirect.replace(/%s/, encodeURIComponent(JSON.stringify(files)))); } else { diff --git a/lib/uploadhandler.js b/lib/uploadhandler.js index 070f018..050f297 100644 --- a/lib/uploadhandler.js +++ b/lib/uploadhandler.js @@ -108,55 +108,70 @@ module.exports = function (options) { .on('file', function (name, file) { counter++; var fileInfo = map[path.basename(file.path)]; - fs.exists(file.path, function(exists) { - if (exists) { - fileInfo.size = file.size; - if (!fileInfo.validate()) { - fs.unlink(file.path); - finish(); - return; - } - var generatePreviews = function () { - if (options.imageTypes.test(fileInfo.name)) { - _.each(options.imageVersions, function (value, version) { - counter++; - // creating directory recursive - mkdirp(options.uploadDir() + '/' + version + '/', function (err, made) { - var opts = options.imageVersions[version]; - imageMagick.resize({ - width: opts.width, - height: opts.height, - srcPath: options.uploadDir() + '/' + fileInfo.name, - dstPath: options.uploadDir() + '/' + version + '/' + fileInfo.name, - customArgs: opts.imageArgs || ['-auto-orient'] - }, finish); - }); - }); + (function (_next) { + if (options.imageTypes.test(fileInfo.name)) { + imageMagick.identify(file.path, function (err, features) { + if (!err) { + fileInfo.width = features.width; + fileInfo.height = features.height; + } + _next(); + }); + } else { + _next(); + } + })(function () { + fs.exists(file.path, function(exists) { + if (exists) { + fileInfo.size = file.size; + if (!fileInfo.validate()) { + fs.unlink(file.path); + finish(); + return; } - } - mkdirp(options.uploadDir() + '/', function(err, made) { - fs.rename(file.path, options.uploadDir() + '/' + fileInfo.name, function (err) { - if (!err) { - generatePreviews(); - finish(); - } else { - var is = fs.createReadStream(file.path); - var os = fs.createWriteStream(options.uploadDir() + '/' + fileInfo.name); - is.on('end', function (err) { - if (!err) { - fs.unlink(file.path); - generatePreviews(); - } - finish(); + var generatePreviews = function () { + if (options.imageTypes.test(fileInfo.name)) { + _.each(options.imageVersions, function (value, version) { + counter++; + // creating directory recursive + mkdirp(options.uploadDir() + '/' + version + '/', function (err, made) { + var opts = options.imageVersions[version]; + imageMagick.resize({ + width: opts.width, + height: opts.height, + srcPath: options.uploadDir() + '/' + fileInfo.name, + dstPath: options.uploadDir() + '/' + version + '/' + fileInfo.name, + customArgs: opts.imageArgs || ['-auto-orient'] + }, finish); + }); }); - is.pipe(os); } + } + + mkdirp(options.uploadDir() + '/', function(err, made) { + fs.rename(file.path, options.uploadDir() + '/' + fileInfo.name, function (err) { + if (!err) { + generatePreviews(); + finish(); + } else { + var is = fs.createReadStream(file.path); + var os = fs.createWriteStream(options.uploadDir() + '/' + fileInfo.name); + is.on('end', function (err) { + if (!err) { + fs.unlink(file.path); + generatePreviews(); + } + finish(); + }); + is.pipe(os); + } + }); }); - }); - } - else finish(); + } + else finish(); + }); }); }) .on('aborted', function () { diff --git a/package.json b/package.json index dc11e0c..66a7a85 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,11 @@ ], "version": "0.1.7", "dependencies": { - "formidable": ">=1.0.11", - "imagemagick": ">=0.1.2", - "lodash": ">= 0.9.2", - "mkdirp": ">= 0.3.4", - "async": "*" + "async": "^1.5.0", + "formidable": "^1.0.11", + "imagemagick": "^0.1.2", + "lodash": "^4.17.11", + "mkdirp": "^0.5.1" }, "engines": { "node": ">= 0.8.8"