diet-upload

0.0.3 • Public • Published

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

}});

Readme

Keywords

none

Package Sidebar

Install

npm i diet-upload

Weekly Downloads

2

Version

0.0.3

License

MIT

Last publish

Collaborators

  • adamhalasz