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

Django Rest Framework Excel文件上传失败:request.FILES为空求助

解决DRF Excel文件上传request.FILES为空的问题

核心问题定位

你提供的curl命令里,表单参数仅指定了文件路径但未设置字段名为file,而你的视图代码里用request.data['file']获取文件,两者字段名不匹配,这是导致拿不到文件的关键原因。

分步解决方案

1. 修正请求的表单字段名

不管用curl还是Postman,必须确保文件对应的表单字段名是file:

  • 正确的curl命令:
curl --location 'http://localhost:8000/amm-api/upload/upload_workbook/' \
--form 'file=@"/Users/razan/Projects/HTS/ags-carmax/Robbie_Lisa-Branch.xlsx"'
  • Postman操作:在form-data选项卡中,把文件项的Key设置为file,Value选择本地Excel文件。

2. 优化视图代码(适配最新DRF)

最新DRF版本中,MultiPartParser是处理多表单上传的标准解析器,统一用request.data获取数据更稳妥,避免混用request.POST:

from rest_framework.parsers import MultiPartParser
from rest_framework.response import Response
from rest_framework import status
from rest_framework.views import APIView
import json

class UploadWorkbookView(APIView):
    parser_classes = [MultiPartParser]

    def put(self, request, format=None):
        # 先校验文件是否存在
        if 'file' not in request.data:
            return Response({'error': '未上传文件'}, status=status.HTTP_400_BAD_REQUEST)
        
        file_obj = request.data['file']
        # 可选:校验文件格式
        if not file_obj.name.endswith('.xlsx'):
            return Response({'error': '仅支持.xlsx格式文件'}, status=status.HTTP_400_BAD_REQUEST)
        
        # 处理表单数据(如果存在)
        form_data = json.loads(request.data.get('form', '{}'))
        print(file_obj, form_data)

        # 此处添加文件处理逻辑,比如保存文件或解析Excel内容
        # 示例保存文件:
        # with open(f'./uploads/{file_obj.name}', 'wb+') as dest:
        #     for chunk in file_obj.chunks():
        #         dest.write(chunk)

        return Response(status=status.HTTP_201_CREATED)

3. 检查项目基础配置

  • 确保settings.py中已启用django.middleware.csrf.CsrfViewMiddleware(本地测试可临时关闭,生产环境必须开启)
  • DRF默认已支持文件上传,无需额外配置解析器优先级,除非你自定义了全局解析器

关于FileUploadParser的说明

FileUploadParser适用于单文件上传场景,要求URL中携带文件名参数(如/?filename=xxx.xlsx),且请求Content-Type需为multipart/form-data或application/octet-stream,相比MultiPartParser更繁琐,因此处理带表单数据的文件上传时,优先用MultiPartParser。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:43:23