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

Postman测试DRF多文件上传出现文件类型验证错误求助

问题分析与解决方案

问题根源

你遇到的错误有两个核心原因:

  1. Postman请求参数格式不匹配:DRF的ListField(FileField)期望接收数组形式的文件参数,但当前Postman设置未正确传递数组格式的文件列表,导致DRF无法识别每个文件。
  2. 视图代码逻辑错误:处理序列化后的数据时,错误使用data.pop(file_list)——这里file_list是data中的文件列表值,而pop方法需要传入键名字符串。

步骤1:修正Postman请求设置

在Postman中按以下方式配置请求:

  • 请求方法选PUT,填写接口URL
  • 切换到Body标签,选择form-data格式
  • 关键配置:每个文件的键名设为file_list[](带方括号),依次添加4个图片文件;若Postman版本支持,也可直接用file_list作为键名,点击"Add Files"多选4个文件(确保Postman将其作为数组发送)
  • 无需手动修改Content-Type,Postman会自动设置为multipart/form-data

步骤2:修正Django视图代码

以下是修正后的完整视图:

class PostImageValidate(APIView):
    permission_classes = (IsAuthenticated, IsNotSuspended)

    def put(self, request):
        serializer = TempImageSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        data = serializer.validated_data
        # 直接通过键名获取并移除文件列表
        uploaded_files = data.pop('file_list')

        results = []
        for file in uploaded_files:
            results.append({"filename": file.name, "size": file.size, "status": "Processed"})

        return Response(
            {
                "message": "Images processed successfully", 
                "results": results, 
                "number of items": len(results)
            }, 
            status=status.HTTP_201_CREATED
        )

说明:去掉了request_data = request.data.dict(),因为DRF的request.data已是可直接使用的对象,转成dict可能丢失数组格式参数信息。


步骤3:序列化器无需修改

你的TempImageSerializer配置正确,已声明file_list为非空文件列表:

class TempImageSerializer(serializers.Serializer):
    file_list = serializers.ListField(
        child=serializers.FileField(max_length=150, allow_empty_file=False), 
        allow_empty=False
    )

测试验证

按上述配置重新发起请求,DRF将正确解析4个文件,返回预期响应:

{
    "message": "Images processed successfully",
    "results": [
        {"filename": "img1.jpg", "size": 12345, "status": "Processed"},
        {"filename": "img2.jpg", "size": 67890, "status": "Processed"},
        {"filename": "img3.jpg", "size": 11223, "status": "Processed"},
        {"filename": "img4.jpg", "size": 44556, "status": "Processed"}
    ],
    "number of items": 4
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.05 16:13:10