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

如何获取Django中TemporaryUploadedFile的原始文件名及扩展名?

解决方案

核心问题说明

你之前通过dict((self.context['request'].data).lists()).get('images', None)获取文件列表的方式本身没问题,但错误地取了临时文件的名称而非上传时的原始文件名。Django的UploadedFile对象本身就存储了原始文件名(含扩展名),和TemporaryFileUploadHandler的配置无关。

实现步骤

  1. 正确获取文件列表:直接从request.data中用getlist获取文件数组,无需转成字典。
  2. 提取原始文件名:每个文件对象的.name属性就是客户端上传时的原始文件名(带扩展名)。
  3. 拆分文件名与扩展名:用Python标准库os.path.splitext拆分文件名和扩展名。

代码示例

import os
from rest_framework.response import Response
from rest_framework.views import APIView

class ImageUploadView(APIView):
    def post(self, request):
        # 直接获取上传的文件列表,默认返回空列表
        images = request.data.getlist('images', [])
        
        for image in images:
            # 获取原始文件名(包含扩展名)
            original_filename = image.name
            # 拆分文件名和扩展名
            file_name, file_ext = os.path.splitext(original_filename)
            
            # 示例:按原始文件名保存文件(可自定义保存路径)
            # 若需处理重名,可在文件名后添加时间戳等标识
            image.save(original_filename, image)
            
            # 调试输出(可选)
            print(f"原始文件名:{original_filename}")
            print(f"文件名:{file_name},扩展名:{file_ext}")
        
        return Response({"message": "文件上传处理完成"})

关键注意点

  • UploadedFile.name属性不受上传处理器影响,无论用TemporaryFileUploadHandler还是MemoryFileUploadHandler,都能稳定拿到原始文件名。
  • 如果需要避免文件名重名覆盖,可以在保存前对文件名添加后缀(比如时间戳、随机字符串)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:30:49