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

Django后端读取用户上传CSV文件遇FileNotFoundError报错

解决FileNotFoundError:读取Django上传CSV文件的正确方式

问题原因

你用default_storage.url(file_name)获取的是Web访问URL,不是服务器本地的文件系统路径,而pd.read_csv()需要的是本地磁盘的真实路径,所以会报文件找不到的错误。

正确实现方式

方式1:直接读取上传的文件流(推荐,无需保存文件)

既然不想将文件存入数据库,甚至可以不用把文件保存到磁盘,直接读取上传的文件对象:

def view_submit_form(request):
    if request.method == 'POST':
        text = request.POST.get('smstext')
        csv_file = request.FILES['csv_file']
        # 直接用UploadedFile对象读取,无需保存到磁盘
        df = pd.read_csv(csv_file)
        # 后续对df进行业务处理...

    return render(request, 'SubmitForm/form.html')

方式2:临时保存到本地后读取(若需临时留存文件)

如果确实需要临时保存文件到服务器本地,用default_storage.path()获取本地文件路径,而不是url():

from django.core.files.storage import default_storage

def view_submit_form(request):
    if request.method == 'POST':
        text = request.POST.get('smstext')
        csv_file = request.FILES['csv_file']
        # 保存文件到默认存储位置
        file_name = default_storage.save(csv_file.name, csv_file)
        # 获取本地文件系统的真实路径
        local_file_path = default_storage.path(file_name)
        df = pd.read_csv(local_file_path)
        # 后续对df进行业务处理...
        # 若无需留存文件,处理完成后可删除
        # default_storage.delete(file_name)

    return render(request, 'SubmitForm/form.html')

注意事项

  • 确保Django项目配置了正确的MEDIA_ROOT和MEDIA_URL,default_storage默认使用文件系统存储,对应MEDIA_ROOT目录。
  • 方式1更高效,避免了额外的磁盘IO操作,适合仅需一次性读取处理的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:20:31