You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django自动上传文件触发WinError 123路径语法错误如何解决?

问题根源排查与解决方案

报错的核心原因是FileField接收到的文件名包含Windows盘符的绝对路径,最终被拼接到了存储路径的末尾,导致路径不合法。

具体触发原因

你创建File对象时没有手动指定name属性,此时Django会默认使用你打开文件时的绝对路径作为文件的name值。当history_directory_path函数直接使用这个值拼接存储路径时,就会把C:这类盘符信息也带入最终路径,触发你遇到的WinError 123报错。

修复方案

  • 方案1:创建File对象时手动指定纯文件名
    修改你的上传脚本中创建File对象的代码,手动传入你已经提取好的纯文件名:
# 原来的代码
my_file = File(f)
# 修改为
my_file = File(f, name=filename)

这里的filename是你已经通过os.path.basename拿到的不带路径的纯文件名,指定后传给upload_to回调的文件名参数就不会包含盘符和路径信息。

  • 方案2:在history_directory_path函数中做兜底处理
    不管传入的文件名是否带路径,都先提取纯文件名再拼接路径,示例如下:
def history_directory_path(instance, filename):
    # 先提取纯文件名,过滤掉路径、盘符信息
    pure_filename = os.path.basename(filename)
    # 再拼接你原来的路径逻辑
    return f"documents/history/{pure_filename}/version_{instance.version_num}/{pure_filename}"

额外检查项

你贴出的模型定义中date字段的db_column参数漏了闭合单引号,属于笔误,建议同步修复:

# 原来的代码
date = models.DateTimeField(auto_now_add = True, db_column = 'date)
# 修改为
date = models.DateTimeField(auto_now_add = True, db_column = 'date')

内容的提问来源于stack exchange,提问作者brdptr02

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:45:08