diet-upload
v0.0.3
Published
File upload api for node.js
Readme
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-uploadTodo:
- 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();
});
}
}});