2.0.2 • Published 6 years ago

multi-rest v2.0.2

Weekly downloads
7
License
MIT
Repository
github
Last release
6 years ago

Multi Rest v2

Multi rest is a swiss knife for handling multi-part requests for restify, and as all Node.js frameworks use HTTP server at the end so I built this dealing with HTTP requests, this module can handle diffrent files and process them.

| version 2 is received huge update from the last version with the thumbnails for images and videos

Features:

- Path handler.
- File naming. 
- Upload more then one file in the same request. 
- Thumbnails for images & videos.
- S3 support for AWS.
- Upload certain extensions.

In progress

- Handling multiple files under the same fieldname.
- ......

NPM

Example for disk:

const restify = require('restify');
const Multi = require('multi-rest');
const uuid = require('uuid');

var server = restify.createServer();

var upload_disk = new Multi({
    driver: {
        type: 'local',
        path: "./uploads/"
    },
    filename: (name) => { // the extention will be added automaticlly 
        return uuid.v4();
    },
    filefields: {
        video: {
            type: 'video',
            thumbnail: {
                width: 100,
                time: ['10%'],
                count: 1
            },
            required: false,
            extensions: ['mp4']
        },
        image: {
            type: 'picture',
            thumbnail: {
                width: 400,
                height: 300
            },
            required: false,
            extensions: ['png', 'jpg']
        }
    }
});

server.use(restify.plugins.acceptParser(server.acceptable));
server.use(restify.plugins.queryParser());
server.use(restify.plugins.bodyParser());

server.post('/upload', upload_disk ,function (req, res, next){
	res.send({success: true, files: req.files, message: "file uploaded :)"});
});

server.listen(8080, function() {
  console.log('%s listening at %s', server.name, server.url);
});

Example for s3:

check how to configure AWS-SDK for Nodejs

You need to create AWS credentials to ~/.aws/credentials

[default]

aws_access_key_id = your_access_key

aws_secret_access_key = your_secret_key

Test code:

const restify = require('restify');
const Multi = require('multi-rest');
const uuid = require('uuid');

var server = restify.createServer();

var upload_s3 = new Multi({
    driver: {
        type: 's3',
        endpoint: 's3-accelerate.amazonaws.com',
        signatureVersion: 'v4',
        region: 'eu-central-1',
        bucketName: 'test',
        path: ''
    },
    filename: (name) => { // the extention will be added automaticlly 
        return uuid.v4();
    },
    filefields: {
        video: {
            type: 'video',
            thumbnail: {
                height: 100,
                time: ['10%', '40%'],
                count: 2
            },
            required: false,
            extensions: ['mp4']
        },
        image: {
            type: 'picture',
            thumbnail: {
                width: 400,
                height: 300
            },
            required: false,
            extensions: ['png', 'jpg']
        }
    }
});

server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.use(restify.CORS());

server.post('/upload', upload ,function (req, res, next){
	res.send({success: true, files: req.files, message: "file uploaded :)"});
});

server.listen(8080, function() {
  console.log('%s listening at %s', server.name, server.url);
});

File naming

Random

This uses a uuid v4 library to create the file name

function (name) { 
    return uuid.v4();
}
Same name

This uses the name of the uploaded file .

function (name) { 
    return name;
}
Plus date

This will add file upload timestamp after the file name.

function (name) { 
    return name + new Date();
}
Date

This use new Date() to create the file name (not prefered when uploading more then one file)

function (name) { 
    return new Date();
}

License

Licensed under MIT

Author

M. Mahrous developed at The D. GmbH Feel free to contact me M. Mahrous and improve the code.

2.0.2

6 years ago

2.0.1

7 years ago

2.0.0

7 years ago

1.4.5

7 years ago

1.4.4

7 years ago

1.4.3

7 years ago

1.4.2

7 years ago

1.4.1

7 years ago

1.4.0

7 years ago

1.3.2-1

7 years ago

1.3.2

7 years ago

1.3.0-1

8 years ago

1.3.0

8 years ago

1.2.1-1

8 years ago

1.2.1-0

8 years ago

1.2.0-1

8 years ago

1.2.0-0

8 years ago

1.1.5-4

8 years ago

1.1.5-3

8 years ago

1.1.5-2

8 years ago

1.1.5-1

8 years ago

1.1.5-0

8 years ago

1.1.4-0

8 years ago

1.1.3-0

8 years ago

1.1.2-0

8 years ago

1.1.1-0

8 years ago

1.1.0-0

8 years ago

1.0.0

8 years ago