What is content-disposition?
The content-disposition npm package is used to create and parse HTTP Content-Disposition headers. It is commonly used to set the disposition type (inline or attachment) and parameters for a response in a web application, which instructs the browser how to handle the content, such as to display it inline or to download it as a file.
What are content-disposition's main functionalities?
Creating Content-Disposition header for attachment
This code sample demonstrates how to create a Content-Disposition header for an attachment, suggesting the browser to download the file as 'filename.txt'.
const contentDisposition = require('content-disposition');
let header = contentDisposition('filename.txt');
Creating Content-Disposition header with Unicode filenames
This code sample shows how to create a Content-Disposition header for a file with a Unicode filename, ensuring proper encoding for non-ASCII characters.
const contentDisposition = require('content-disposition');
let header = contentDisposition('filename.txt', { type: 'attachment', filename: 'файл.txt' });
Parsing Content-Disposition header
This code sample illustrates how to parse a Content-Disposition header string to get an object representing the disposition type and parameters.
const contentDisposition = require('content-disposition');
let parsedHeader = contentDisposition.parse('attachment; filename="filename.txt"');
Other packages similar to content-disposition
mime
The 'mime' package can be used to determine a file's MIME type based on its extension, which is helpful when setting the Content-Type header. It does not directly handle Content-Disposition headers but is often used in conjunction with setting these headers.
form-data
The 'form-data' package allows for the creation and submission of FormData instances, which can include files with specific Content-Disposition. It is more focused on constructing multipart/form-data payloads than on creating or parsing Content-Disposition headers.
content-disposition
Create an attachment Content-Disposition header
Installation
$ npm install content-disposition
API
var contentDisposition = require('content-disposition')
contentDisposition(filename, options)
Create an attachment Content-Disposition
header value using the given file name,
if supplied. The filename
is optional and if no file name is desired, but you
want to specify options
, set filename
to undefined
.
res.setHeader('Content-Disposition', contentDisposition('∫ maths.pdf'))
Options
contentDisposition
accepts these properties in the options object.
fallback
If the filename
option is outside US-ASCII, then the file name is actually
stored in a supplemental field for clients that support Unicode file names and
a US-ASCII version of the file name is automatically generated.
This specifies the US-ASCII file name to override the automatic generation or
disables the generation all together, defaults to true
.
- A string will specify the US-ASCII file name to use in place of automatic
generation.
false
will disable including a US-ASCII file name and only include the
Unicode version (unless the file name is already US-ASCII).true
will enable automatic generation if the file name is outside US-ASCII.
If the filename
option is US-ASCII and this option is specified and has a
different value, then the filename
option is encoded in the extended field
and this set as the fallback field, even though they are both US-ASCII.
type
Specifies the disposition type, defaults to "attachment"
. This can also be
"inline"
, or any other value (all values except inline are treated like
attachment
, but can convey additional information if both parties agree to
it). The type is normalized to lower-case.
Examples
Send a file for download
var contentDisposition = require('content-disposition')
var destroy = require('destroy')
var http = require('http')
var onFinished = require('on-finished')
var filePath = '/path/to/public/plans.pdf'
http.createServer(function onRequest(req, res) {
res.setHeader('Content-Type', 'application/pdf')
res.setHeader('Content-Disposition', contentDisposition(filePath))
var stream = fs.createReadStream(filePath)
stream.pipe(res)
onFinished(res, function (err) {
destroy(stream)
})
})
Testing
$ npm test
References
License
MIT