我正在尝试从 swagger (使用
drf-yasg
)上传文件输入,但是当我使用 MultiPartParser
类时,它给了我以下错误:
drf_yasg.errors.SwaggerGenerationError: FileField is supported only in a formData Parameter or response Schema
我的看法:
class AddExperience(generics.CreateAPIView):
parser_classes = [MultiPartParser]
permission_classes = [IsAuthenticated]
serializer_class = DoctorExperienceSerializer
我的序列化器:
class DoctorExperienceSerializer(serializers.Serializer):
diploma = serializers.ListField(
child=serializers.FileField(allow_empty_file=False)
)
education = serializers.CharField(max_length=1000)
work_experience = serializers.CharField(max_length=1000)
我也尝试过
FormParser
但它仍然给我同样的错误。另外:FileUploadParser
解析器,但它的工作原理类似于JsonParser
:
OpenAPISchema
(OAS
) 2 不支持多文件上传(参见问题#254);但OAS 3
支持它(您可以在live swagger编辑器上使用这个YML规范(看到这个结果))。
说到真正的问题,drf-yasg 的文档中有一节,
如果您希望向新项目添加 Swagger/OpenAPI 支持,您可能需要看看 drf-spectaulous,这是一个积极维护的新库,它与该项目的大部分目标相同,同时使用 OpenAPI 3.0 模式.
OpenAPI 3.0 在可描述的 API 类型方面比 2.0 提供了更多的灵活性。 drf-yasg 不太可能很快(如果有的话)获得对 OpenAPI 3.0 的支持。
这意味着该软件包
drf-yasg
不支持OAS3
,因此,它不会支持“多个文件上传”功能。
您可以考虑从
drf-yasg
迁移到 drf-spectacular
。但是,还要注意的是,drf-spectacular
也以不同的方式处理 FileUpload。
class DockerExperienceViewSet(viewsets.ModelViewSet):
@swagger_auto_schema(
manual_parameters=[
openapi.Parameter(
name='files',
in_=openapi.IN_FORM,
type=openapi.TYPE_ARRAY,
items=openapi.Items(type=openapi.TYPE_FILE, format=openapi.FORMAT_BINARY),
description="List of files to upload",
required=True
),
],
responses={201: 'Files uploaded successfully!'}
)
de upload_multiple_files(self, request, doctor_id=None, **kwargs):
// do your logic
return Response(status=201)
使用此代码片段,您将能够在 drf-yast 中上传多个文件