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

Django文件上传后如何获取模型中保存的实际文件名

解决方案

你需要接收form.save()返回的已保存的Document模型实例,Django的文件重命名逻辑是在模型保存阶段执行的,所以最终存储的文件名只能从保存后的模型实例的file字段中获取。

修正后的视图代码

import os
from django.conf import settings

def index(request):
    if request.method == 'GET':
        form = DocumentForm()
        return render(request, 'auditoria_app/index.html', {'form': form})
    else:
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            # 接收save方法返回的Document实例
            doc = form.save()
            
            # 以下为不同维度的文件名获取方式,按需选用
            # 1. 获取文件在服务器的绝对完整路径,比如 /data/media/SAE/abc_123456.xls
            full_file_path = doc.file.path
            # 2. 获取相对MEDIA_ROOT的存储路径,比如 SAE/abc_123456.xls
            relative_file_path = doc.file.name
            # 3. 仅获取自动生成后的最终文件名,比如 abc_123456.xls
            actual_file_name = os.path.basename(doc.file.name)

            # 你的后续逻辑可以直接用上面的变量
            split_file_name = os.path.splitext(full_file_path)
            zip_file_name = f"{split_file_name[0]}.zip"

原代码错误原因

form.cleaned_data['file']是用户上传时的原始内存文件对象,此时还没有执行Django的重命名、路径生成逻辑,所以无法拿到最终存储的文件名。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:30:03