mime-detect
Version:
Detect mime type and encoding (aka Content-Type) from buffer, file content and filename.
83 lines (58 loc) • 2.69 kB
Markdown
Detect mime type and encoding (aka Content-Type) from buffer, file content and filename.
[](https://www.npmjs.com/package/mime-detect)
Supported both node.js and browser.
(It can be bundled with esbuild.)
Powered by:
- [file](https://man7.org/linux/man-pages/man1/file.1.html) (Inspired by [mimetype-magic](https://www.npmjs.com/package/mimetype-magic))
- [mime-db](https://www.npmjs.com/package/mime-db)
## Installation
```bash
npm i mime-detect
```
Alternatively, you can also install it [pnpm](https://www.npmjs.com/package/pnpm) or [yarn](https://www.npmjs.com/package/yarn) for better DX.
## Usage Example
```typescript
import { readdirSync, readFileSync } from 'fs'
import { join } from 'path'
import {
detectBufferMime,
detectFileMime,
detectFilenameMime,
} from 'mime-detect'
// return Promise<string> if not given callback
console.log(await detectFileMime('image.jpg'))
// print 'image/jpeg'
// also support callback-style for less async overhead
detectFileMime('index.html', (error, mime) => console.log(mime))
// print 'text/html; charset=us-ascii'
// also can detect from in-memory binary data
let mime = await detectBufferMime(buffer)
// If the mime is text/plain or application/octet-stream, it can determine mime from filename. Otherwise, the original mime will be returned
mime = detectFilenameMime('users.csv', mime)
```
```typescript
export function detectFileMime(file: string, cb: DetectMimeCallback): void
export function detectFileMime(file: string): Promise<string>
export function detectFilenameMime(file: string, mime?: string): string
export function detectBufferMime(buffer: Buffer, cb: DetectMimeCallback): void
export function detectBufferMime(buffer: Buffer): Promise<string>
export interface DetectMimeCallback {
(error: Error, mime?: string): void
(error: null, mime: string): void
}
/**
* @description return file extension name without dot
* e.g. "audio/mp4" -> "m4a"
* e.g. "video/x-matroska" -> "mkv"
*/
export function mimeToExt(mime: string): string
```
## License
This project is licensed with [BSD-2-Clause](./LICENSE)
This is free, libre, and open-source software. It comes down to four essential freedoms [[ref]](https://seirdy.one/2021/01/27/whatsapp-and-the-domestication-of-users.html#fnref:2):
- The freedom to run the program as you wish, for any purpose
- The freedom to study how the program works, and change it so it does your computing as you wish
- The freedom to redistribute copies so you can help others
- The freedom to distribute copies of your modified versions to others