![[Feature] Centralized Upload Validation (Extension Blacklist & Filename Security)](https://www.chat-gpts.plus/wp-content/uploads/2026/07/13443-2d0f3adc.jpg)
[Feature] Centralized Upload Validation (Extension Blacklist & Filename Security)
快速结论:该 Issue 讨论的是 Gradio 文件上传过程中的安全增强提案,并非一个具体报错。核心关注点是:当前 strip_invalid_filename_characters() 函数未能过滤 Windows 保留设备名(如 CON, PRN),导致在 Windows 主机上文件上传失败。优先排查:确认服务器是否为 Windows 系统,并检查上传文件名是否包含 CON、PRN 等保留名。
问题场景
用户在使用 Gradio 框架(版本未知)开发 WebUI 应用时,当用户上传文件名为 Windows 保留设备名(例如 CON.txt、PRN.jpg 等)时,文件上传操作会在后端失败。此问题仅在 Windows 主机上触发,因为 Windows 文件系统禁止创建这些命名的文件。
报错原文
# 非直接报错,而是上传操作因 Windows 文件系统限制而失败
# 具体表现:Gradio 在尝试将临时文件移动到目标路径(包含 CON.txt 等)时失败
# 引发 HTTP 错误或后端异常
原因分析
可能原因:当前 strip_invalid_filename_characters() 函数虽然能过滤大部分不安全字符,但未处理 Windows 保留设备名。当用户上传文件名为 CON、PRN、AUX、NUL、COM1–COM9、LPT1–LPT9(不区分大小写,带或不带扩展名,如 con.jpg)时,该函数会原样返回。随后在 route_utils.py 的 upload_fn() 中,路径拼接后仍包含该保留名,导致在 Windows 上文件写入失败。
环境排查
- 确认服务器操作系统是否为 Windows(开发者或用户端)。
- 确认 Gradio 版本(Issue 关闭于 2026-07-22,建议检查该日期前后的版本)。
- 查看
gradio/utils.py中的strip_invalid_filename_characters()函数实现,确认是否已包含 Windows 保留名检查。
解决步骤
- 检查
gradio/utils.py中的strip_invalid_filename_characters()函数,确认其是否已对 Windows 保留设备名进行拦截。 - 可优先尝试(基于 Issue 中的建议):在该函数末尾添加如下逻辑:获取文件名的主干部分(不带扩展名),将其转为大写后,检查是否在
WINDOWS_RESERVED_NAMES列表(包含 CON, PRN, AUX, NUL, COM1–COM9, LPT1–LPT9)中。若命中,则在文件名前添加下划线_前缀,例如将CON.txt改为_CON.txt。 - 此修改属于非破坏性变更,不会影响已存在的有效文件名(如
.env或-rf)。
验证方法
在 Windows 主机上创建一个 Gradio 应用并尝试上传文件名为 CON.txt 或 PRN.jpg 的文件。若正常上传且文件成功保存(文件名变为 _CON.txt 或 _PRN.jpg),则问题已解决。


![[Bug]: Bug Report: Base64 Image String Being Split into Individual Characters](https://www.chat-gpts.plus/wp-content/uploads/2026/07/9302-a8607eee-768x403.jpg)