diet-upload

File upload api for node.js

npm install diet-upload
1 downloads in the last day
7 downloads in the last week
7 downloads in the last month

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();
        });
    }

}});
npm loves you