From 7188cf0a7347a6f15217e1942d09314d082cecd5 Mon Sep 17 00:00:00 2001 From: Huynh Thuc Date: Sat, 23 May 2020 04:53:29 +0700 Subject: [PATCH 1/4] Update README.md --- README.md | 282 +----------------------------------------------------- 1 file changed, 4 insertions(+), 278 deletions(-) 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 From 240cfe902b27c57cd156db066e41f2c67a3ca03a Mon Sep 17 00:00:00 2001 From: Huynh Thuc Date: Sat, 23 May 2020 04:56:34 +0700 Subject: [PATCH 2/4] Fix issue: Callback must be a function when call delete on NodeJS v7+ --- lib/uploadhandler.js | 2 +- package.json | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/uploadhandler.js b/lib/uploadhandler.js index 070f018..236f8d7 100644 --- a/lib/uploadhandler.js +++ b/lib/uploadhandler.js @@ -189,7 +189,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..02f42e2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "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", @@ -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" } From bee75be190dbed5894e51c351378e41ab14fd58e Mon Sep 17 00:00:00 2001 From: Huynh Thuc Date: Mon, 25 May 2020 19:36:53 +0700 Subject: [PATCH 3/4] Fix issue not run with 14.3.0 --- lib/uploadhandler.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/uploadhandler.js b/lib/uploadhandler.js index 236f8d7..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(); }); From 6ef411ef5ebe4b24e7b88d75214b7e0f4dffc5e4 Mon Sep 17 00:00:00 2001 From: Huynh Thuc Date: Mon, 25 May 2020 21:27:48 +0700 Subject: [PATCH 4/4] Update version 0.1.77 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 02f42e2..eb1384f 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "express", "middleware" ], - "version": "0.1.7", + "version": "0.1.77", "dependencies": { "formidable": ">=1.0.11", "imagemagick": ">=0.1.2",