Django REST Framework文件上载导致“不支持的媒体类型'multipart / form-data'”错误

时间:2016-04-27 06:18:35

标签: python django rest django-rest-framework

我是Django和Django REST Framework的新手。我有以下序列化程序类,我用它来上传其他信息的文件。但是,当我使用上传文件运行API端点时,结果如下:

HTTP 415 Unsupported Media Type
Allow: POST, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "detail": "Unsupported media type \"multipart/form-data; boundary=----WebKitFormBoundaryybZ07gjZAqvcsZw3\" in request."
}

我通过谷歌搜索努力解决这个问题,但无法在解决方案中出现,所以这里是我的序列化程序和API视图。

串行:

class ExampleSerializer(serializers.Serializer):

    example_id = serializers.IntegerField()
    description = serializers.CharField(allow_blank=True)
    example_file = serializers.FileField(allow_empty_file=True)

    def create_requirement_line(self):
        request = self.context['request']

        requirement_line = ExampleService().example_method(
            example_id=self.validated_data['example_id'],
            description=self.validated_data['description'],
            example_file=self.validated_data['example_file']
    )
    return requirement_line

查看:

 class RequirementLineAPIView(BaseCreateAPIView):

    serializer_class = ExampleSerializer
    parser_classes = (FormParser,)

    def post(self, request, format=None,*args, **kwargs):
        serializer = self.get_serializer(data=request.data)

        if serializer.is_valid():
            try:
                example_variable = serializer.example_method()
                return Response(example_variable, status=status.HTTP_200_OK)

            except ValidationError as e:
                return Response(e.message, status=status.HTTP_400_BAD_REQUEST)

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)    

3 个答案:

答案 0 :(得分:3)

如果您要发送多部分/表单数据,则应使用MultiPartParser而不是FormParser。

答案 1 :(得分:0)

尝试使用FileField解析器 Using Parsers in django rest

答案 2 :(得分:0)

在访问request.DATA或request.FILES时,如果没有解析器可以处理请求数据的内容类型,则引发该错误。

check Django REST Framework2 documentation

导入合适的解析器

from rest_framework.parsers import MultiPartParser, FormParser, JSONParser

class SampleView(APIView):
    parser_classes = (MultiPartParser,FormParser,JSONParser)