From 0c153b0430bfee252ed4eb69053c75c244e67b14 Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Mon, 24 Nov 2025 08:56:40 -0500 Subject: [PATCH] fix: support loading .nii.gz files from local file system Browsers provide application/gzip MIME type for .nii.gz files. The updateFileMimeType handler now checks if the browser-provided type is in our supported list before skipping. If the type is unsupported (like application/gzip), it continues to check the filename extension to correctly identify compound extensions like .nii.gz, .gipl.gz, etc. --- src/io/import/processors/importSingleFile.ts | 4 +++- src/io/import/processors/updateFileMimeType.ts | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/io/import/processors/importSingleFile.ts b/src/io/import/processors/importSingleFile.ts index 9b3e50cd5..3db0a5feb 100644 --- a/src/io/import/processors/importSingleFile.ts +++ b/src/io/import/processors/importSingleFile.ts @@ -43,7 +43,9 @@ const importSingleFile: ImportHandler = async (dataSource) => { return asLoadableResult(dataID, dataSource, 'model'); } - throw new Error('Data reader did not produce a valid dataset'); + throw new Error( + `Failed to import "${dataSource.file.name}". The file may be corrupted or in an unsupported format variant.` + ); }; export default importSingleFile; diff --git a/src/io/import/processors/updateFileMimeType.ts b/src/io/import/processors/updateFileMimeType.ts index 9817632a6..ee4fff43b 100644 --- a/src/io/import/processors/updateFileMimeType.ts +++ b/src/io/import/processors/updateFileMimeType.ts @@ -1,17 +1,27 @@ import { Skip } from '@/src/utils/evaluateChain'; import { getFileMimeType } from '@/src/io'; import { ImportHandler, asIntermediateResult } from '@/src/io/import/common'; +import { MIME_TYPES } from '@/src/io/mimeTypes'; /** * Transforms a file data source to have a mime type * @param dataSource */ const updateFileMimeType: ImportHandler = async (dataSource) => { - if (dataSource.type !== 'file' || dataSource.fileType !== '') return Skip; + if (dataSource.type !== 'file') return Skip; + + const knownType = + dataSource.fileType !== '' && MIME_TYPES.has(dataSource.fileType); + if (knownType) { + return Skip; + } const mime = await getFileMimeType(dataSource.file); + if (!mime) { - throw new Error('File is unsupported'); + throw new Error( + `Unrecognized file type for "${dataSource.file.name}". This file format is not supported.` + ); } return asIntermediateResult([