An open API service indexing awesome lists of open source software.

https://github.com/simov/request-multipart

Multipart body support for request-compose
https://github.com/simov/request-multipart

Last synced: about 1 year ago
JSON representation

Multipart body support for request-compose

Awesome Lists containing this project

README

          

# request-multipart

[![npm-version]][npm] [![gh-actions]][github] [![coveralls-status]][coveralls]

> _Multipart body support for **[request-compose]**_

```js
var request = require('request-compose').extend({
Request: {multipart: require('request-multipart')}
}).client

;(async () => {
try {
var {res, body} = await request({
method: 'POST',
url: 'https://slack.com/api/files.upload',
headers: {
authorization: 'Bearer [ACCESS TOKEN]'
},
multipart: {
file: require('fs').createReadStream('cat.png')
}
})
console.log(body)
}
catch (err) {
console.error(err)
}
})()
```

# multipart/form-data

```js
multipart: {
key: 'value' // String, Buffer or Stream
}
```

```js
multipart: {
status: 'Hello',
'media[]': fs.createReadStream('cat.png')
}
```

```
--88b7fcd3-7776-4087-8b09-5b0f5c8af069
Content-Disposition: form-data; name="status"
Content-Type: text/plain

Hello

--88b7fcd3-7776-4087-8b09-5b0f5c8af069
Content-Disposition: form-data; name="media[]"; filename="cat.png"
Content-Type: image/png

...stream...
```

### Options

> Most servers expect the `filename` key to be set inside the `Content-Disposition` and a correct MIME type to be specified as `Content-Type`. When reading a file as `Buffer` request-multipart cannot determine those values.

```js
multipart: {
key: {
body: 'value', // String, Buffer or Stream
options: {name: '', type: '', length: 0}
}
}
```

```js
multipart: {
file: {
body: fs.readFileSync('cat.png'),
options: {name: 'cat.png', type: 'image/png'}
}
}
```

```
--77f9de0f-8905-4b63-9ca9-ad1ff9827053
Content-Disposition: form-data; name="file"; filename="cat.png"
Content-Type: image/png

...buffer...
```

### List

```js
multipart: {
key: [
'value', // String, Buffer or Stream
'value', // String, Buffer or Stream
]
}
```

```js
multipart: {
attachment: [
fs.createReadStream('cat.png'),
fs.createReadStream('beep.mp3')
]
}
```

```
--21cd47c7-379b-43f3-8e5e-d95c36653abf
Content-Disposition: form-data; name="attachment"; filename="cat.png"
Content-Type: image/png

...stream...

--21cd47c7-379b-43f3-8e5e-d95c36653abf
Content-Disposition: form-data; name="attachment"; filename="beep.mp3"
Content-Type: audio/mpeg

...stream...
```

# multipart/related

```js
multipart: [
{
key: 'value',
body: 'value' // String, Buffer or Stream
},
{
key: 'value',
body: 'value' // String, Buffer or Stream
}
]
```

```js
multipart: [
{
'Content-Type': 'application/json',
body: JSON.stringify({name: 'cat.png'})
},
{
'Content-Type': 'image/png',
body: fs.createReadStream('cat.png')
}
]
```

```
--f3386c29-f73f-423f-b80e-9dac2801893b
Content-Type: application/json

{"name":"cat.png"}

--f3386c29-f73f-423f-b80e-9dac2801893b
Content-Type: image/png

...stream...
```

# [examples]

```bash
DEBUG=req,res,body,json node examples/multipart.js slack
```

[npm-version]: https://img.shields.io/npm/v/request-multipart.svg?style=flat-square (NPM Package Version)
[gh-actions]: https://img.shields.io/github/workflow/status/simov/request-multipart/test?style=flat-square (Build Status - GitHub Actions)
[coveralls-status]: https://img.shields.io/coveralls/simov/request-multipart.svg?style=flat-square (Test Coverage - Coveralls)

[npm]: https://www.npmjs.com/package/request-multipart
[github]: https://github.com/simov/request-multipart/actions
[coveralls]: https://coveralls.io/github/simov/request-multipart

[request-compose]: https://www.npmjs.com/package/request-compose
[examples]: https://github.com/simov/request-multipart/blob/master/examples/multipart.js