diff --git a/README.md b/README.md index 204c7a3..c542275 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -jquery-file-upload-middleware +jquery-file-upload-middleware-fix ============================= jQuery-File-Upload Express.js middleware. Based on the server code of [jQuery-File-Upload](https://github.com/blueimp/jQuery-File-Upload) @@ -6,282 +6,8 @@ jQuery-File-Upload Express.js middleware. Based on the server code of [jQuery-Fi Installation: ``` - $ npm install jquery-file-upload-middleware + $ npm install jquery-file-upload-middleware-fix ``` -Usage: - -```javascript - var express = require("express"), - upload = require('jquery-file-upload-middleware'); - - var app = express(); - - // configure upload middleware - upload.configure({ - uploadDir: __dirname + '/public/uploads', - uploadUrl: '/uploads', - imageVersions: { - thumbnail: { - width: 80, - height: 80 - } - } - }); - - app.configure(function () { - ... - app.use('/upload', upload.fileHandler()); - app.use(express.bodyParser()); - ... - }); - -``` - -On the frontend: - -```html - - -``` - -To prevent access to /upload except for post (for security) -```javascript -upload.configure({ - uploadDir: __dirname + '/public/uploads/', - uploadUrl: '/uploads' -}); - -/// Redirect all to home except post -app.get('/upload', function( req, res ){ - res.redirect('/'); -}); - -app.put('/upload', function( req, res ){ - res.redirect('/'); -}); - -app.delete('/upload', function( req, res ){ - res.redirect('/'); -}); - -app.use('/upload', function(req, res, next){ - upload.fileHandler({ - uploadDir: function () { - return __dirname + '/public/uploads/' - }, - uploadUrl: function () { - return '/uploads' - } - })(req, res, next); -}); -``` - -Overriding global configuration - -```javascript - - app.use('/upload2', upload.fileHandler({ - uploadDir: __dirname + '/public/uploads2', - uploadUrl: '/uploads2', - imageVersions: { - thumbnail: { - width: 100, - height: 100 - } - } - })); - -``` - -More sophisticated example - Events - -```javascript - app.use('/upload', upload.fileHandler()); - - // events - upload.on('begin', function (fileInfo, req, res) { - // fileInfo structure is the same as returned to browser - // { - // name: '3 (3).jpg', - // originalName: '3.jpg', - // size: 79262, - // type: 'image/jpeg', - // delete_type: 'DELETE', - // delete_url: 'http://yourhost/upload/3%20(3).jpg', - // url: 'http://yourhost/uploads/3%20(3).jpg', - // thumbnail_url: 'http://youhost/uploads/thumbnail/3%20(3).jpg' - // } - }); - upload.on('abort', function (fileInfo, req, res) { ... }); - upload.on('end', function (fileInfo, req, res) { ... }); - upload.on('delete', function (fileInfo, req, res) { ... }); - upload.on('error', function (e, req, res) { - console.log(e.message); - }); -``` - -Dynamic upload directory and url, isolating user files: - -```javascript - upload.configure({ - imageVersions: { - thumbnail: { - width: 80, - height: 80 - } - } - }); - - app.use('/upload', function (req, res, next) { - // imageVersions are taken from upload.configure() - upload.fileHandler({ - uploadDir: function () { - return __dirname + '/public/uploads/' + req.sessionID - }, - uploadUrl: function () { - return '/uploads/' + req.sessionID - } - })(req, res, next); - }); -``` - -Moving uploaded files to different dir: - -```javascript - app.use('/api', function (req, res, next) { - req.filemanager = upload.fileManager(); - next(); - }); - - app.use('/api/endpoint', function (req, res, next) { - // your real /api handler that will actually move the file - ... - // req.filemanager.move(filename, path, function (err, result)) - req.filemanager.move('SomeFile.jpg', 'project1', function (err, result) { - // SomeFile.jpg gets moved from uploadDir/SomeFile.jpg to - // uploadDir/project1/SomeFile.jpg - // if path is relative (no leading slash), uploadUrl will - // be used to generate relevant urls, - // for absolute paths urls are not generated - if (!err) { - // result structure - // { - // filename: 'SomeFile.jpg', - // url: '/uploads/project1/SomeFile.jpg', - // thumbail_url : '/uploads/project1/thumbnail/SomeFile.jpg' - // } - ... - } else { - console.log(err); - } - }); - }); -``` - -Moving uploaded files out of uploadDir: - -``` - app.use('/api', function (req, res, next) { - var user = db.find(...); - - req.filemanager = upload.fileManager({ - targetDir: __dirname + '/public/u/' + user._id, - targetUrl: '/u/' + user._id, - }); - - // or - req.filemanager = upload.fileManager({ - targetDir: function () { - return __dirname + '/public/u/' + user._id - }, - targetUrl: function () { - return'/u/' + user._id - } - }); - ... - req.filemanager.move(req.body.filename, 'profile', function (err, result) { - // file gets moved to __dirname + '/public/u/' + user._id + '/profile' - if (!err) { - - } - }); - }); -``` - -Getting uploaded files mapped to their fs locations: - -```javascript - app.use('/list', function (req, res, next) { - upload.fileManager().getFiles(function (files) { - // { - // "00001.MTS": { - // "path": "/home/.../public/uploads/ekE6k4j9PyrGtcg+SA6a5za3/00001.MTS" - // }, - // "DSC00030.JPG": { - // "path": "/home/.../public/uploads/ekE6k4j9PyrGtcg+SA6a5za3/DSC00030.JPG", - // "thumbnail": "/home/.../public/uploads/ekE6k4j9PyrGtcg+SA6a5za3/thumbnail/DSC00030.JPG" - // } - // } - res.json(files); - }); - }); - - // with dynamic upload directories - - app.use('/list', function (req, res, next) { - upload.fileManager({ - uploadDir: function () { - return __dirname + '/public/uploads/' + req.sessionID - }, - uploadUrl: function () { - return '/uploads/' + req.sessionID - } - }).getFiles(function (files) { - res.json(files); - }); - }); -``` - -Other options and their default values: - -```javascript -{ - tmpDir: '/tmp', - uploadDir: __dirname + '/public/uploads', - uploadUrl: '/uploads', - targetDir: uploadDir, - targetUrl: uploadUrl, - ssl: false, - hostname: null, // in case your reverse proxy doesn't set Host header - // eg 'google.com' - maxPostSize: 11000000000, // 11 GB - minFileSize: 1, - maxFileSize: 10000000000, // 10 GB - acceptFileTypes: /.+/i, - imageTypes: /\.(gif|jpe?g|png)$/i, - imageVersions: { - thumbnail: { - width: 80, - height: 80 - } - }, - imageArgs: ['-auto-orient'], - accessControl: { - allowOrigin: '*', - allowMethods: 'OPTIONS, HEAD, GET, POST, PUT, DELETE' - } -} -``` - -## Contributors - - * [@soomtong](http://github.com/soomtong) - * [@gsarwohadi](https://github.com/gsarwohadi) - * [@peecky](https://github.com/peecky) - * [@tonyspiro](https://github.com/tonyspiro) - * [@derjust](https://github.com/derjust) - -## License -Copyright (c) 2012 [Aleksandr Guidrevitch](http://aguidrevitch.blogspot.com/) -Released under the [MIT license](http://www.opensource.org/licenses/MIT). +This repos only have the fix for issues when running with Node v+7 ++ delete : uncaughtException: Callback must be a function diff --git a/lib/uploadhandler.js b/lib/uploadhandler.js index 070f018..9b50eb0 100644 --- a/lib/uploadhandler.js +++ b/lib/uploadhandler.js @@ -122,7 +122,11 @@ module.exports = function (options) { _.each(options.imageVersions, function (value, version) { counter++; // creating directory recursive - mkdirp(options.uploadDir() + '/' + version + '/', function (err, made) { + // mkdirp(options.uploadDir() + '/' + version + '/', function (err, made) { + + // }); + + mkdirp(options.uploadDir() + '/' + version + '/').then(made => { var opts = options.imageVersions[version]; imageMagick.resize({ width: opts.width, @@ -132,11 +136,12 @@ module.exports = function (options) { customArgs: opts.imageArgs || ['-auto-orient'] }, finish); }); + }); } } - mkdirp(options.uploadDir() + '/', function(err, made) { + mkdirp(options.uploadDir() + '/').then(made => { fs.rename(file.path, options.uploadDir() + '/' + fileInfo.name, function (err) { if (!err) { generatePreviews(); @@ -155,6 +160,7 @@ module.exports = function (options) { } }); }); + } else finish(); }); @@ -189,7 +195,7 @@ module.exports = function (options) { } fs.unlink(filepath, function (ex) { _.each(options.imageVersions, function (value, version) { - fs.unlink(path.join(options.uploadDir(), version, fileName)); + fs.unlink(path.join(options.uploadDir(), version, fileName), function(){}); }); self.emit('delete', fileName); self.callback({success: !ex}); diff --git a/package.json b/package.json index dc11e0c..eb1384f 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { - "name": "jquery-file-upload-middleware", - "author": "Aleksandr Guidrevitch ", - "description": "jQuery-File-Upload Express.js Middleware", + "name": "jquery-file-upload-middleware-fix", + "author": "Aleksandr Guidrevitch - fix issue by haruthuc@gmail.com ", + "description": "jQuery-File-Upload-Fix Express.js Middleware", "keywords": [ "jquery", "upload", "express", "middleware" ], - "version": "0.1.7", + "version": "0.1.77", "dependencies": { "formidable": ">=1.0.11", "imagemagick": ">=0.1.2", @@ -29,6 +29,6 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, - "_id": "jquery-file-upload-middleware@0.1.7", + "_id": "jquery-file-upload-middleware-fix@0.1.1", "license": "MIT" }