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

Python Web应用中从HTML文件上传器提取文件名遇问题

问题:提取上传文件名时Path.name返回完整路径而非文件名

我正在开发一个Python Web应用,页面里用HTML <input type="file" id="file"> 实现文件上传功能。需要获取用户上传文件的文件名,但后端接收到的输入框值是类似 C:\fakepath\hello.txt 的字符串。

我写了如下代码尝试提取文件名(假设用户上传的是hello.txt):

def process(value: str) -> bool:
    status: bool = False
    print(f'{value}')  # 输出 C:\fakepath\hello.txt
    
    file_path: Path = Path(value)
    file_name: str = file_path.name  # 结果是 C:\fakepath\hello.txt 而非 hello.txt
    
    # 后续处理代码
    
    return status

但file_path.name返回的是完整路径而非目标文件名,请问哪里出错了?


原因分析

Windows系统下,C:\fakepath\hello.txt 这种格式对Python的Path来说,会被识别成相对路径下的文件名——因为开头的C:\并不是有效的相对路径前缀(这里是浏览器伪造的路径,并非真实存在的本地路径),Path会把整个字符串当作一个包含特殊字符的完整文件名,所以name属性返回整个字符串。

解决方法

方法1:按反斜杠分割字符串

直接按反斜杠\分割字符串,取最后一段即可:

def process(value: str) -> bool:
    status: bool = False
    print(f'{value}')  # 输出 C:\fakepath\hello.txt
    
    file_name: str = value.split('\\')[-1]
    print(file_name)  # 输出 hello.txt
    
    # 后续处理代码
    
    return status

方法2:使用os.path.basename

os.path.basename可以正确处理这种伪造路径,直接提取文件名:

import os

def process(value: str) -> bool:
    status: bool = False
    print(f'{value}')  # 输出 C:\fakepath\hello.txt
    
    file_name: str = os.path.basename(value)
    print(file_name)  # 输出 hello.txt
    
    # 后续处理代码
    
    return status

补充说明

浏览器出于安全隐私考虑,不会将用户本地的真实文件路径传递给后端,只会返回C:\fakepath\拼接文件名的伪造路径,因此不需要处理真实本地路径的逻辑,直接提取最后一段即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:07:19