@aws-amplify/storage
Version:
Storage category of aws-amplify
100 lines (95 loc) • 2.68 kB
text/typescript
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
const MIME_TYPES: Record<string, string> = {
// Audio
aac: 'audio/aac',
mid: 'audio/midi',
midi: 'audio/x-midi',
mp3: 'audio/mpeg',
oga: 'audio/ogg',
opus: 'audio/ogg',
wav: 'audio/wav',
weba: 'audio/webm',
// Video
avi: 'video/x-msvideo',
mp4: 'video/mp4',
mpeg: 'video/mpeg',
ogv: 'video/ogg',
ts: 'video/mp2t',
webm: 'video/webm',
// Images
apng: 'image/apng',
avif: 'image/avif',
bmp: 'image/bmp',
gif: 'image/gif',
ico: 'image/vnd.microsoft.icon',
jpeg: 'image/jpeg',
jpg: 'image/jpeg',
png: 'image/png',
svg: 'image/svg+xml',
tif: 'image/tiff',
tiff: 'image/tiff',
webp: 'image/webp',
// Text
css: 'text/css',
csv: 'text/csv',
htm: 'text/html',
html: 'text/html',
ics: 'text/calendar',
js: 'text/javascript',
md: 'text/markdown',
mjs: 'text/javascript',
txt: 'text/plain',
// Application
abw: 'application/x-abiword',
arc: 'application/x-freearc',
azw: 'application/vnd.amazon.ebook',
bin: 'application/octet-stream',
bz: 'application/x-bzip',
bz2: 'application/x-bzip2',
cda: 'application/x-cdf',
csh: 'application/x-csh',
doc: 'application/msword',
docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
eot: 'application/vnd.ms-fontobject',
epub: 'application/epub+zip',
gz: 'application/gzip',
jar: 'application/java-archive',
json: 'application/json',
jsonld: 'application/ld+json',
mpkg: 'application/vnd.apple.installer+xml',
odp: 'application/vnd.oasis.opendocument.presentation',
ods: 'application/vnd.oasis.opendocument.spreadsheet',
odt: 'application/vnd.oasis.opendocument.text',
ogx: 'application/ogg',
pdf: 'application/pdf',
php: 'application/x-httpd-php',
ppt: 'application/vnd.ms-powerpoint',
pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
rar: 'application/vnd.rar',
rtf: 'application/rtf',
sh: 'application/x-sh',
tar: 'application/x-tar',
vsd: 'application/vnd.visio',
webmanifest: 'application/manifest+json',
xhtml: 'application/xhtml+xml',
xls: 'application/vnd.ms-excel',
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
xml: 'application/xml',
zip: 'application/zip',
// Fonts
otf: 'font/otf',
ttf: 'font/ttf',
woff: 'font/woff',
woff2: 'font/woff2',
};
/**
* Detect content type from file data or filename extension
*/
export const getContentType = (data: any, key: string): string | undefined => {
if (data instanceof File && data.type) {
return data.type;
}
const ext = key.split('.').pop()?.toLowerCase();
return ext ? MIME_TYPES[ext] : undefined;
};