https://github.com/thedgmbh/multi-rest
A middleware to handle multi-part request for restify
https://github.com/thedgmbh/multi-rest
api multi-rest multipart nodejs npm npm-package restify
Last synced: 2 months ago
JSON representation
A middleware to handle multi-part request for restify
- Host: GitHub
- URL: https://github.com/thedgmbh/multi-rest
- Owner: thedgmbh
- License: mit
- Created: 2016-10-06T22:58:14.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2018-04-07T12:56:39.000Z (about 7 years ago)
- Last Synced: 2025-03-04T11:40:30.892Z (3 months ago)
- Topics: api, multi-rest, multipart, nodejs, npm, npm-package, restify
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/multi-rest
- Size: 51.8 KB
- Stars: 5
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Multi Rest v2
Multi rest is a swiss knife for handling multi-part requests for [restify](http://restify.com), 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.
- ......[](https://nodei.co/npm/multi-rest/)
#### Example for disk:
```javascript
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](https://aws.amazon.com/sdk-for-node-js/) 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:```javascript
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
```javascript
function (name) {
return uuid.v4();
}
```
##### Same name
This uses the name of the uploaded file .
```javascript
function (name) {
return name;
}
```
##### Plus date
This will add file upload timestamp after the file name.
```javascript
function (name) {
return name + new Date();
}
```
##### Date
This use `new Date()` to create the file name (not prefered when uploading more then one file)
```javascript
function (name) {
return new Date();
}
```
#### License
Licensed under MIT#### Author
M. Mahrous developed at [The D. GmbH](https://thed.io)
Feel free to contact me [M. Mahrous](mailto:[email protected]) and improve the code.