https://github.com/grantila/stream-mime-type
Get the mime type of a stream
https://github.com/grantila/stream-mime-type
Last synced: 6 months ago
JSON representation
Get the mime type of a stream
- Host: GitHub
- URL: https://github.com/grantila/stream-mime-type
- Owner: grantila
- License: mit
- Created: 2020-11-22T09:28:48.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2023-02-07T18:33:02.000Z (over 2 years ago)
- Last Synced: 2024-12-17T01:34:25.499Z (10 months ago)
- Language: TypeScript
- Size: 1.16 MB
- Stars: 10
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![npm version][npm-image]][npm-url]
[![downloads][downloads-image]][npm-url]
[![build status][build-image]][build-url]
[![coverage status][coverage-image]][coverage-url]# stream-mime-type
Get the mime type of a stream by inspecting its header. The stream is being consumed, but a new readable stream is returned together with the mime type.
Supports both [Node.js ReadableStream](https://nodejs.org/api/stream.html) (of Buffers, not *object-mode*) and [Streams API ReadableStream](https://developer.mozilla.org/docs/Web/API/Streams_API) of [typed arrays](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) (such as e.g. [Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)), [ArrayBuffers](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) or [DataViews](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/DataView).
The first couple of kilobytes are necessary to deduce the filetype. After that, the returned promise is resolved with a new stream (from the beginning of the input stream) and the mime type.
It also supports buffers (of type `Uint8Array`, such as [Node.js Buffers](https://nodejs.org/api/buffer.html)) and file descriptors instead of streams.
## Versions
From v2:
* This package is a pure ESM, no CommonJS support# Usage
`getMimeType` takes either a number (file descriptor), a buffer (`Uint8Array`) or a readable stream as first argument. The returned promise contains the mime type and a new readable stream (if the input was a stream) for further streaming, on the form:
```ts
interface ReturnType {
stream: ReadableStream; // If the input was a stream, otherwise undefined
mime: string;
}
```To aid finding the mime-type if it is unclear given the *content* of the stream (or buffer or file descriptor), a filename can be provided, in which case a mime-type can be deduced as a fallback.
## API
```ts
getMimeType( stream | buffer | fd, opts? ): Promise;
```## Stream example
```ts
import { getMimeType } from 'stream-mime-type'let inStream: NodeJS.ReadableStream; // Get from somewhere
const { stream, mime } = await getMimeType( inStream );console.log(mime); // e.g. 'image/png'
stream.pipe(outStream); // Keep streaming
```## Buffer example
```ts
import { readFileSync } from 'fs'
import { getMimeType } from 'stream-mime-type'const imageBuffer = readFileSync("file.png", null); // Returns a Buffer
const { mime } = await getMimeType( imageBuffer, { filename: "file.png" } );console.log(mime); // 'image/png'
```## File descriptor
```ts
import { openSync } from 'fs'
import { getMimeType } from 'stream-mime-type'const fd = openSync("file.png", "r");
const { mime } = await getMimeType( fd, { filename: "file.png" } );console.log(mime); // 'image/png'
```## Options
The second argument to `getMimeType` is an options object on the format:
```ts
interface GetMimeTypeOptions {
strict?: boolean;
filename?: string;
}
```The `filename` can provide a hint to the content type if it's not found by the file contents.
The `strict` can be set to `true` (defaults to `false`) in which case the result will not fallback to `application/octet-stream` if no other mime type was found. The return value will be `undefined` instead.
[npm-image]: https://img.shields.io/npm/v/stream-mime-type.svg
[npm-url]: https://npmjs.org/package/stream-mime-type
[downloads-image]: https://img.shields.io/npm/dm/stream-mime-type.svg
[build-image]: https://img.shields.io/github/actions/workflow/status/grantila/stream-mime-type/master.yml?branch=master
[build-url]: https://github.com/grantila/stream-mime-type/actions?query=workflow%3AMaster
[coverage-image]: https://coveralls.io/repos/github/grantila/stream-mime-type/badge.svg?branch=master
[coverage-url]: https://coveralls.io/github/grantila/stream-mime-type?branch=master