{"id":18539107,"url":"https://github.com/simov/request-multipart","last_synced_at":"2025-05-15T02:30:35.958Z","repository":{"id":57354085,"uuid":"131766741","full_name":"simov/request-multipart","owner":"simov","description":"Multipart body support for request-compose","archived":false,"fork":false,"pushed_at":"2021-03-21T09:22:34.000Z","size":72,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-26T06:45:23.842Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/simov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-05-01T21:49:04.000Z","updated_at":"2023-03-04T06:05:03.000Z","dependencies_parsed_at":"2022-09-05T13:10:38.224Z","dependency_job_id":null,"html_url":"https://github.com/simov/request-multipart","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simov%2Frequest-multipart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simov%2Frequest-multipart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simov%2Frequest-multipart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simov%2Frequest-multipart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simov","download_url":"https://codeload.github.com/simov/request-multipart/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239255308,"owners_count":19608251,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T19:46:17.200Z","updated_at":"2025-02-17T08:13:51.823Z","avatar_url":"https://github.com/simov.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# request-multipart\n\n[![npm-version]][npm] [![gh-actions]][github] [![coveralls-status]][coveralls]\n\n\u003e _Multipart body support for **[request-compose]**_\n\n```js\nvar request = require('request-compose').extend({\n  Request: {multipart: require('request-multipart')}\n}).client\n\n;(async () =\u003e {\n  try {\n    var {res, body} = await request({\n      method: 'POST',\n      url: 'https://slack.com/api/files.upload',\n      headers: {\n        authorization: 'Bearer [ACCESS TOKEN]'\n      },\n      multipart: {\n        file: require('fs').createReadStream('cat.png')\n      }\n    })\n    console.log(body)\n  }\n  catch (err) {\n    console.error(err)\n  }\n})()\n```\n\n# multipart/form-data\n\n```js\nmultipart: {\n  key: 'value' // String, Buffer or Stream\n}\n```\n\n```js\nmultipart: {\n  status: 'Hello',\n  'media[]': fs.createReadStream('cat.png')\n}\n```\n\n```\n--88b7fcd3-7776-4087-8b09-5b0f5c8af069\nContent-Disposition: form-data; name=\"status\"\nContent-Type: text/plain\n\nHello\n\n--88b7fcd3-7776-4087-8b09-5b0f5c8af069\nContent-Disposition: form-data; name=\"media[]\"; filename=\"cat.png\"\nContent-Type: image/png\n\n...stream...\n```\n\n### Options\n\n\u003e 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.\n\n```js\nmultipart: {\n  key: {\n    body: 'value', // String, Buffer or Stream\n    options: {name: '', type: '', length: 0}\n  }\n}\n```\n\n```js\nmultipart: {\n  file: {\n    body: fs.readFileSync('cat.png'),\n    options: {name: 'cat.png', type: 'image/png'}\n  }\n}\n```\n\n```\n--77f9de0f-8905-4b63-9ca9-ad1ff9827053\nContent-Disposition: form-data; name=\"file\"; filename=\"cat.png\"\nContent-Type: image/png\n\n...buffer...\n```\n\n### List\n\n```js\nmultipart: {\n  key: [\n    'value', // String, Buffer or Stream\n    'value', // String, Buffer or Stream\n  ]\n}\n```\n\n```js\nmultipart: {\n  attachment: [\n    fs.createReadStream('cat.png'),\n    fs.createReadStream('beep.mp3')\n  ]\n}\n```\n\n```\n--21cd47c7-379b-43f3-8e5e-d95c36653abf\nContent-Disposition: form-data; name=\"attachment\"; filename=\"cat.png\"\nContent-Type: image/png\n\n...stream...\n\n--21cd47c7-379b-43f3-8e5e-d95c36653abf\nContent-Disposition: form-data; name=\"attachment\"; filename=\"beep.mp3\"\nContent-Type: audio/mpeg\n\n...stream...\n```\n\n# multipart/related\n\n```js\nmultipart: [\n  {\n    key: 'value',\n    body: 'value' // String, Buffer or Stream\n  },\n  {\n    key: 'value',\n    body: 'value' // String, Buffer or Stream\n  }\n]\n```\n\n```js\nmultipart: [\n  {\n    'Content-Type': 'application/json',\n    body: JSON.stringify({name: 'cat.png'})\n  },\n  {\n    'Content-Type': 'image/png',\n    body: fs.createReadStream('cat.png')\n  }\n]\n```\n\n```\n--f3386c29-f73f-423f-b80e-9dac2801893b\nContent-Type: application/json\n\n{\"name\":\"cat.png\"}\n\n--f3386c29-f73f-423f-b80e-9dac2801893b\nContent-Type: image/png\n\n...stream...\n```\n\n# [examples]\n\n```bash\nDEBUG=req,res,body,json node examples/multipart.js slack\n```\n\n  [npm-version]: https://img.shields.io/npm/v/request-multipart.svg?style=flat-square (NPM Package Version)\n  [gh-actions]: https://img.shields.io/github/workflow/status/simov/request-multipart/test?style=flat-square (Build Status - GitHub Actions)\n  [coveralls-status]: https://img.shields.io/coveralls/simov/request-multipart.svg?style=flat-square (Test Coverage - Coveralls)\n\n  [npm]: https://www.npmjs.com/package/request-multipart\n  [github]: https://github.com/simov/request-multipart/actions\n  [coveralls]: https://coveralls.io/github/simov/request-multipart\n\n  [request-compose]: https://www.npmjs.com/package/request-compose\n  [examples]: https://github.com/simov/request-multipart/blob/master/examples/multipart.js\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimov%2Frequest-multipart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimov%2Frequest-multipart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimov%2Frequest-multipart/lists"}