Skip to main content

mime-types

The mime-types module provides utilities for working with MIME types, allowing you to look up MIME types based on file extensions and vice versa.

Import

const mime = require('mime-types');

API Reference

mime.lookup(path)

Lookup the MIME type for a file path or extension.

Parameters:

  • path - File path or extension

Returns: MIME type string or false if not found

mime.contentType(type)

Create a full Content-Type header value for a given MIME type or file extension.

Parameters:

  • type - MIME type or file extension

Returns: Content-Type string or false

mime.extension(type)

Get the default file extension for a MIME type.

Parameters:

  • type - MIME type

Returns: Extension string (without dot) or false

mime.charset(type)

Get the default charset for a MIME type.

Parameters:

  • type - MIME type

Returns: Charset string or false

mime.types

Object mapping extensions to MIME types.

mime.extensions

Object mapping MIME types to extensions.

Examples

Lookup MIME Type by Extension

const mime = require('mime-types');

export async function handler(event) {
const filename = event.filename || 'document.pdf';

const mimeType = mime.lookup(filename);

return {
filename: filename,
mimeType: mimeType,
found: mimeType !== false
};
}

Get Extension from MIME Type

const mime = require('mime-types');

export async function handler(event) {
const mimeType = event.mimeType || 'image/jpeg';

const extension = mime.extension(mimeType);

return {
mimeType: mimeType,
extension: extension,
withDot: extension ? `.${extension}` : null
};
}

Create Content-Type Header

const mime = require('mime-types');

export async function handler(event) {
const filename = event.filename || 'index.html';

const contentType = mime.contentType(filename);

return {
filename: filename,
contentType: contentType,
mimeType: mime.lookup(filename),
charset: mime.charset(mime.lookup(filename))
};
}

Determine Charset

const mime = require('mime-types');

export async function handler(event) {
const mimeType = event.mimeType || 'text/html';

const charset = mime.charset(mimeType);

return {
mimeType: mimeType,
charset: charset,
hasCharset: charset !== false,
fullContentType: mime.contentType(mimeType)
};
}

Multiple File Type Detection

const mime = require('mime-types');

export async function handler(event) {
const files = event.files || [
'document.pdf',
'image.png',
'video.mp4',
'audio.mp3',
'data.json',
'script.js',
'style.css',
'page.html'
];

const results = files.map(file => ({
filename: file,
mimeType: mime.lookup(file),
contentType: mime.contentType(file),
extension: file.split('.').pop()
}));

return {
totalFiles: files.length,
results: results
};
}

File Upload Validation

const mime = require('mime-types');

export async function handler(event) {
const filename = event.filename || 'upload.txt';
const allowedTypes = event.allowedTypes || [
'image/jpeg',
'image/png',
'image/gif',
'application/pdf'
];

const mimeType = mime.lookup(filename);
const isAllowed = allowedTypes.includes(mimeType);

return {
filename: filename,
detectedType: mimeType,
isAllowed: isAllowed,
allowedTypes: allowedTypes,
message: isAllowed
? 'File type is allowed'
: 'File type is not allowed'
};
}

Content-Type for HTTP Response

const mime = require('mime-types');

export async function handler(event) {
const filename = event.filename || 'api-response.json';

const contentType = mime.contentType(filename);

// Simulate HTTP response headers
const headers = {
'Content-Type': contentType,
'Content-Disposition': `attachment; filename="${filename}"`,
'Cache-Control': 'no-cache'
};

return {
filename: filename,
headers: headers,
mimeType: mime.lookup(filename)
};
}

Categorize Files by Type

const mime = require('mime-types');

export async function handler(event) {
const files = event.files || [
'photo.jpg',
'video.mp4',
'document.pdf',
'song.mp3',
'data.json',
'archive.zip'
];

const categorized = {
images: [],
videos: [],
audio: [],
documents: [],
data: [],
other: []
};

files.forEach(file => {
const mimeType = mime.lookup(file);

if (mimeType) {
if (mimeType.startsWith('image/')) {
categorized.images.push(file);
} else if (mimeType.startsWith('video/')) {
categorized.videos.push(file);
} else if (mimeType.startsWith('audio/')) {
categorized.audio.push(file);
} else if (mimeType === 'application/pdf' ||
mimeType.includes('document')) {
categorized.documents.push(file);
} else if (mimeType === 'application/json' ||
mimeType === 'application/xml') {
categorized.data.push(file);
} else {
categorized.other.push(file);
}
} else {
categorized.other.push(file);
}
});

return {
totalFiles: files.length,
categories: categorized,
summary: {
images: categorized.images.length,
videos: categorized.videos.length,
audio: categorized.audio.length,
documents: categorized.documents.length,
data: categorized.data.length,
other: categorized.other.length
}
};
}

Check if Type is Text

const mime = require('mime-types');

export async function handler(event) {
const filename = event.filename || 'document.txt';

const mimeType = mime.lookup(filename);
const charset = mime.charset(mimeType);

// Text files usually have a charset
const isText = charset !== false;

return {
filename: filename,
mimeType: mimeType,
charset: charset,
isText: isText,
isBinary: !isText
};
}

Generate Download Filename

const mime = require('mime-types');

export async function handler(event) {
const contentType = event.contentType || 'application/pdf';
const baseName = event.baseName || 'report';
const timestamp = event.timestamp || Date.now();

const extension = mime.extension(contentType);
const filename = `${baseName}-${timestamp}.${extension}`;

return {
contentType: contentType,
extension: extension,
generatedFilename: filename,
downloadHeaders: {
'Content-Type': contentType,
'Content-Disposition': `attachment; filename="${filename}"`
}
};
}

MIME Type Database Query

const mime = require('mime-types');

export async function handler(event) {
const searchExtension = event.extension || 'json';

// Get MIME type for extension
const mimeType = mime.types[searchExtension];

// Get all extensions for this MIME type
const allExtensions = mimeType ? mime.extensions[mimeType] : [];

return {
searchedExtension: searchExtension,
mimeType: mimeType || 'not found',
allExtensionsForType: allExtensions,
contentType: mime.contentType(searchExtension)
};
}

Common MIME Types Reference

const mime = require('mime-types');

export async function handler(event) {
const commonTypes = {
web: {
html: mime.lookup('file.html'),
css: mime.lookup('file.css'),
javascript: mime.lookup('file.js'),
json: mime.lookup('file.json'),
xml: mime.lookup('file.xml')
},
images: {
jpeg: mime.lookup('file.jpg'),
png: mime.lookup('file.png'),
gif: mime.lookup('file.gif'),
svg: mime.lookup('file.svg'),
webp: mime.lookup('file.webp')
},
documents: {
pdf: mime.lookup('file.pdf'),
word: mime.lookup('file.docx'),
excel: mime.lookup('file.xlsx'),
powerpoint: mime.lookup('file.pptx'),
text: mime.lookup('file.txt')
},
media: {
mp3: mime.lookup('file.mp3'),
mp4: mime.lookup('file.mp4'),
wav: mime.lookup('file.wav'),
webm: mime.lookup('file.webm')
},
archives: {
zip: mime.lookup('file.zip'),
tar: mime.lookup('file.tar'),
gzip: mime.lookup('file.gz'),
rar: mime.lookup('file.rar')
}
};

return commonTypes;
}

Common MIME Types

ExtensionMIME TypeDescription
.htmltext/htmlHTML document
.csstext/cssCSS stylesheet
.jsapplication/javascriptJavaScript
.jsonapplication/jsonJSON data
.xmlapplication/xmlXML document
.pdfapplication/pdfPDF document
.jpgimage/jpegJPEG image
.pngimage/pngPNG image
.gifimage/gifGIF image
.svgimage/svg+xmlSVG image
.mp3audio/mpegMP3 audio
.mp4video/mp4MP4 video
.zipapplication/zipZIP archive
.txttext/plainPlain text

Best Practices

  • Use for file validation - Verify uploaded file types
  • Set correct Content-Type - Ensure proper browser handling
  • Check charset for text - Include charset for text MIME types
  • Validate on both ends - Check MIME type on client and server
  • Don't trust extensions - File extension can be misleading
  • Use Content-Disposition - Specify filename for downloads
  • Handle unknown types - Provide fallback for unrecognized types

Common Use Cases

  • File upload validation - Check allowed file types
  • HTTP response headers - Set Content-Type correctly
  • File categorization - Group files by type
  • Download filename generation - Create appropriate filenames
  • Content negotiation - Serve correct content format
  • Static file serving - Determine file MIME type

Next Steps