adamhalasz / diet-upload

Node.js upload module built on formidable. It's fast and supports progress tracking and mysql.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Upload Module

Node.js upload module built on formidable. It's fast and supports progress tracking and mysql.

Install

If you have diet it's already installed.

npm install diet-upload

Todo:

  • Simplify API
  • Better Documentation
  • Create an independent image processing API.

Node.js Setup:

// Setup
upload = new Upload({
	// Original Paths
	public	: '/root/static/files/',
	path	: '/root/static/files/uploads/',
	tmp		: '/root/mes/tmp/',
	// Custom upload paths
	paths : {
		// Images
		'image/gif' : 'uploads/images/',
		'image/jpg' : 'uploads/images/',
		'image/png' : 'uploads/'
	},
	// Mysql
	mysql: app.mysql
});

Example:

// LISTENER function
upload.listener = function(name, configure){
	// REGISTER upload type contents
	upload.contents[name] = {};
	
	// REGISTER upload path
	var regex = new RegExp('^\/upload\/'+name+'\/+([a-zA-Z0-9\-\_\.!@#$%^&*]+)$', 'i'); // NO g JUST i
	app.post.simple(regex, function(request, response, mysql){
		var key = request.params[1];
		var options = configure(request, response, key);
		upload.load(request, response, options);
	}, true); // MySQL must be disabled if Upload Streaming is enabled
	
	// REGISTER content result path
	var regex = new RegExp('^\/upload\/contents\/'+name+'\/+([a-zA-Z0-9\-\_\.!@#$%^&*]+)$', 'i');
	app.post.simple(regex, function(request, response, mysql){
		var key = request.params[1];
		
		response.end(JSON.stringify(upload.contents[name][key]));
		
		// REMOVE contents from memory
		delete upload.contents[name][key];
		
		// REMOVE the upload key from memory
		keys.remove(key);
	}, true);
}

// Avatar Uploading
upload.listener('avatar', function(request, response, key){ return {
	path 		: 'uploads/avatars/',
	log			: app.path + '/logs/uploads/avatars.log',
	size_total	: 3, // MB 
	size_each	: 3, // MB 
	key			: key,
	mime		: ['image/png', 'image/gif', 'image/jpg', 'image/jpeg'],
	commands	: {
		'images' : {
			thumbnail : { 
				path   : 'uploads/avatars/',
				width  : 64,
				height : 64
			}
		},
	},
	end: function(request, response, errors, fields, files, mysql){
		// The avatar is the first file in the files list
		var avatar = files[0];
		response.setHeader("Content-Type", "text/plain");
		
		// REMOVE the upload key
		keys.remove(key);
		
		// INSERT avatar into the database
		mysql('INSERT INTO avatars (owner, name, path, mime, size) '
			+ 'VALUES ('+ request.cookies.id  + ', "'
						+ sanitize(avatar.name) + '", "'
						+ sanitize(avatar.path) + '", "'
						+ sanitize(avatar.mime) + '", '
						+ avatar.size
			+')', 
		function(rows, onerror){
			onerror('error on upload.js - upload avatar error!');
			response.end(JSON.stringify(files));
			request.mysql_close();
		});
	}

}});

About

Node.js upload module built on formidable. It's fast and supports progress tracking and mysql.


Languages

Language:JavaScript 100.0%