Learn about our RFC process, Open RFC meetings & more.Join in the discussion! »

multi-rest

2.0.2 • Public • Published

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.

Install

npm i multi-rest

DownloadsWeekly Downloads

17

Version

2.0.2

License

MIT

Last publish

Collaborators

  • avatar
  • avatar
  • avatar
  • avatar