AK-21/Graphite-Industrial-Intelligence
0
1# content-disposition2 3[![NPM Version][npm-image]][npm-url]4[![NPM Downloads][downloads-image]][downloads-url]5[![Node.js Version][node-version-image]][node-version-url]6[![Build Status][github-actions-ci-image]][github-actions-ci-url]7[![Test Coverage][coveralls-image]][coveralls-url]8 9Create and parse HTTP `Content-Disposition` header10 11## Installation12 13```sh14$ npm install content-disposition15```16 17## API18 19```js20const contentDisposition = require('content-disposition')21```22 23### contentDisposition(filename, options)24 25Create an attachment `Content-Disposition` header value using the given file name,26if supplied. The `filename` is optional and if no file name is desired, but you27want to specify `options`, set `filename` to `undefined`.28 29```js30res.setHeader('Content-Disposition', contentDisposition('∫ maths.pdf'))31```32 33**note** HTTP headers are of the ISO-8859-1 character set. If you are writing this34header through a means different from `setHeader` in Node.js, you'll want to specify35the `'binary'` encoding in Node.js.36 37#### Options38 39`contentDisposition` accepts these properties in the options object.40 41##### fallback42 43If the `filename` option is outside ISO-8859-1, then the file name is actually44stored in a supplemental field for clients that support Unicode file names and45a ISO-8859-1 version of the file name is automatically generated.46 47This specifies the ISO-8859-1 file name to override the automatic generation or48disables the generation all together, defaults to `true`.49 50 - A string will specify the ISO-8859-1 file name to use in place of automatic51 generation.52 - `false` will disable including a ISO-8859-1 file name and only include the53 Unicode version (unless the file name is already ISO-8859-1).54 - `true` will enable automatic generation if the file name is outside ISO-8859-1.55 56If the `filename` option is ISO-8859-1 and this option is specified and has a57different value, then the `filename` option is encoded in the extended field58and this set as the fallback field, even though they are both ISO-8859-1.59 60##### type61 62Specifies the disposition type, defaults to `"attachment"`. This can also be63`"inline"`, or any other value (all values except inline are treated like64`attachment`, but can convey additional information if both parties agree to65it). The type is normalized to lower-case.66 67### contentDisposition.parse(string)68 69```js70const disposition = contentDisposition.parse('attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt')71```72 73Parse a `Content-Disposition` header string. This automatically handles extended74("Unicode") parameters by decoding them and providing them under the standard75parameter name. This will return an object with the following properties (examples76are shown for the string `'attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt'`):77 78 - `type`: The disposition type (always lower case). Example: `'attachment'`79 80 - `parameters`: An object of the parameters in the disposition (name of parameter81 always lower case and extended versions replace non-extended versions). Example:82 `{filename: "€ rates.txt"}`83 84## Examples85 86### Send a file for download87 88```js89const contentDisposition = require('content-disposition')90const fs = require('fs')91const http = require('http')92const onFinished = require('on-finished')93 94const filePath = '/path/to/public/plans.pdf'95 96http.createServer(function onRequest (req, res) {97 // set headers98 res.setHeader('Content-Type', 'application/pdf')99 res.setHeader('Content-Disposition', contentDisposition(filePath))100 101 // send file102 const stream = fs.createReadStream(filePath)103 stream.pipe(res)104 onFinished(res, function () {105 stream.destroy()106 })107})108```109 110## Testing111 112```sh113$ npm test114```115 116## References117 118- [RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1][rfc-2616]119- [RFC 5987: Character Set and Language Encoding for Hypertext Transfer Protocol (HTTP) Header Field Parameters][rfc-5987]120- [RFC 6266: Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)][rfc-6266]121- [Test Cases for HTTP Content-Disposition header field (RFC 6266) and the Encodings defined in RFCs 2047, 2231 and 5987][tc-2231]122 123[rfc-2616]: https://datatracker.ietf.org/doc/html/rfc2616124[rfc-5987]: https://datatracker.ietf.org/doc/html/rfc5987125[rfc-6266]: https://datatracker.ietf.org/doc/html/rfc6266126[tc-2231]: http://greenbytes.de/tech/tc2231/127 128## License129 130[MIT](LICENSE)131 132[npm-image]: https://img.shields.io/npm/v/content-disposition133[npm-url]: https://www.npmjs.com/package/content-disposition134[node-version-image]: https://img.shields.io/node/v/content-disposition135[node-version-url]: https://nodejs.org/en/download136[coveralls-image]: https://img.shields.io/coverallsCoverage/github/jshttp/content-disposition137[coveralls-url]: https://coveralls.io/github/jshttp/content-disposition?branch=master138[downloads-image]: https://img.shields.io/npm/dm/content-disposition139[downloads-url]: https://www.npmjs.com/package/content-disposition140[github-actions-ci-image]: https://img.shields.io/github/actions/workflow/status/jshttp/content-disposition/ci.yml141[github-actions-ci-url]: https://github.com/jshttp/content-disposition/actions/workflows/ci.yml142 