From 52898c6e7d2705b2e1f34d6f2dfd482d46348cf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Skyler=20M=C3=A4ntysaari?= Date: Sun, 5 Feb 2023 04:40:24 +0200 Subject: [PATCH] Handling of mimetype on server --- .../immich/src/config/asset-upload.config.ts | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/server/apps/immich/src/config/asset-upload.config.ts b/server/apps/immich/src/config/asset-upload.config.ts index be1c88b619..3bab8f9466 100644 --- a/server/apps/immich/src/config/asset-upload.config.ts +++ b/server/apps/immich/src/config/asset-upload.config.ts @@ -48,19 +48,27 @@ export const multerUtils = { fileFilter, filename, destination }; const logger = new Logger('AssetUploadConfig'); +function getMimeType(file: Express.Multer.File) { + const extension = file.originalname.split('.').pop() as string; + switch (extension) { + case 'raf': + return 'image/x-fuji-raf'; + case 'srw': + return 'image/x-samsung-srw'; + default: + return file.mimetype; + } +} + function fileFilter(req: Request, file: any, cb: any) { if (!req.user || (req.user.isPublicUser && !req.user.isAllowUpload)) { return cb(new UnauthorizedException()); } - // TODO: Create new API endpoint for mimetypes and use that here as browser's - // file mimetype is not to be trusted. - // Reference about issue with it: https://stackoverflow.com/questions/26149389/mime-type-missing-for-rar-and-tar/26222177#26222177 + file.mimetype = getMimeType(file); if ( file.mimetype.match( /\/(jpg|jpeg|png|gif|mp4|webm|x-msvideo|quicktime|heic|heif|dng|x-adobe-dng|webp|tiff|3gpp|nef|x-nikon-nef|x-fuji-raf|x-samsung-srw)$/, - ) || - (file.mimetype.match('application/octet-stream') && extname(file.originalname.toLowerCase()) == '.raf') || - (file.mimetype.match('application/octet-stream') && extname(file.originalname.toLowerCase()) == '.srw') + ) ) { cb(null, true); } else {