file_types filed does not take compound field extensions like *.nii.gz

这个报错发生在 Gradio 的 gr.File 组件上传多段后缀文件(如 .nii.gz 、 .tar.gz )时,因为校验逻辑只取最后一个后缀,导致无法匹配。优先排查你使用的 gradio_client 中 utils.is_valid_file 的实现,或暂时用 .gz 这类单段后缀绕过。

快速结论:这个报错发生在 Gradio 的 gr.File 组件上传多段后缀文件(如 .nii.gz.tar.gz)时,因为校验逻辑只取最后一个后缀,导致无法匹配。优先排查你使用的 gradio_clientutils.is_valid_file 的实现,或暂时用 .gz 这类单段后缀绕过。

适用环境:Gradio 5.6.0 首次报告,官方确认在 6.22.0(commit bf3b4e39c)仍可复现。涉及 Python 与 Gradio Client 组件,未提及具体操作系统、CUDA 或显卡信息。

最快修复方案:暂无确认的一步修复方案。Issue 中明确验证的临时绕过方法是将 file_types['.nii.gz'] 改为 ['.gz'],但该方案尚未在官方版本中合入修复。

注意事项:绕过方案会放宽文件类型限制,可能允许非 .nii.gz 文件通过校验;根本修复需等待 Gradio 官方调整 is_valid_file 的匹配逻辑。

问题场景

在 Gradio gr.File 组件中上传 NIfTI 医学影像文件,这类文件的后缀可能是 .nii 或压缩后的 .nii.gz。用户设置 file_types=['.nii.gz'] 后上传失败,但改为 ['.gz'] 却能成功。

报错原文

gradio.exceptions.Error: 'Invalid file type. Please upload a file that is one of these formats: ['.nii.gz']'

原因分析

可能原因是 Gradio Client 的 utils.is_valid_file 函数在比较文件后缀时使用 Path.suffix,该方法只返回文件名最后一个点号后的部分。对于多段后缀文件,Path('scan.nii.gz').suffix 只得到 '.gz',而不是完整的 '.nii.gz'。因此设置 file_types=['.nii.gz'] 时永远无法匹配,而 ['.gz'] 恰好能匹配到尾部,所以可以正常工作。Issue 中已定位到 client/python/gradio_client/utils.py 内的 is_valid_file 函数,其中 file_type = file_type.lstrip(".").lower()file_ext = Path(file_path).suffix.lstrip(".").lower() 的等值比较是核心触发点。同样受影响的后缀还包括 .tar.gz.tar.bz2 等复合扩展名。

环境排查

  • 确认 Gradio 版本:Issue 报告于 5.6.0,官方验证 6.22.0 仍存在。
  • 检查 gradio_client 模块是否与 Gradio 主版本匹配,建议升级到最新版本。
  • 确认上传文件的完整文件名,确保后缀为小写且不含多余空格。
  • 如果使用 gr.Filepreprocess 方法测试,检查传入的 FileDataorig_name 是否包含完整后缀。

解决步骤

  1. 临时绕过(已验证可用):file_types 参数从 ['.nii.gz'] 改为 ['.gz'],可立即解除上传限制。
  2. 等待官方修复:关注 Gradio 仓库中该 Issue 的进展,等待 is_valid_file 的逻辑更新,预计会改为按文件名字符串尾部匹配来判断扩展名。
  3. 自行修改源码(可选,风险自担):找到 gradio_client/utils.py 中的 is_valid_file 函数,将 Path(file_path).suffix 的取值逻辑改为从完整文件名字符串中提取尾部匹配,例如判断 file_path.lower().endswith(file_type),以支持单段和多段后缀。
  4. 验证修改:修改后用 .nii.gz 类型的文件重新调用 is_valid_file 或直接通过 gr.File 上传测试。

验证方法

修改后,使用文件名为 scan.nii.gz 的文件通过 gr.File(file_types=['.nii.gz']) 上传,若能正常通过 preprocess 不抛异常,或出现预期内的后续业务报错,即说明文件类型校验已通过。也可参考 Issue 评论中的测试代码,直接调用 utils.is_valid_file 对比返回值。

参考来源

gradio-app/gradio #10022

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18569

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注