Graphene-file-upload обработка multipart/form-data

Я пытаюсь загрузить изображение из моего react/nextJS front end в мой Django backend, используя graphQL и graphene-file-upload.

Это фронтенд - важными функциями здесь являются handleSelectedLogo и submitVendor

Это бэкенд schema.py

class CreateLogo(graphene.Mutation):
    class Arguments:
        file = Upload(required=True)
     

    success = graphene.Boolean()

    @staticmethod
    def mutate(self, info, file, **kwargs):
        # do something with your file
        print(info.context.FILES.items)
        print('This is file:', file)
        print(kwargs)
        logo = Logo(logo=file)
        logo.save()

        return CreateLogo(success=True)


class Mutation(graphene.ObjectType):
    token_auth = graphql_jwt.ObtainJSONWebToken.Field()
    verify_token = graphql_jwt.Verify.Field()
    refresh_token = graphql_jwt.Refresh.Field()
    
    #greetings
    update_greeting = UpdateGreeting.Field()
    create_greeting = CreateGreeting.Field()

    #vendors
    create_vendor = CreateVendor.Field()
    update_vendor = UpdateVendor.Field()
    single_upload = UploadMutation.Field()
    create_logo = CreateLogo.Field()
    


schema = graphene.Schema(query=Query, mutation=Mutation)

Это ошибка, которую я получаю

django.http.multipartparser.MultiPartParserError: Invalid boundary in multipart: None
[20/Jul/2022 00:21:47] "POST /api/graphql/ HTTP/1.1" 400 143

Если я меняю заголовок запроса на Content-type: "application/json", запросы проходят успешно, но аргумент file в методе mutate пуст, как и info.context.FILES.items

Подведем итоги: запрос на выборку не проходит, если заголовок Content-Type: multipart/form-data, и проходит успешно, но файл не отправляется, если заголовок Content-Type: "application/json.

Я искал в Интернете похожую проблему, но, похоже, ни у кого нет решения этой проблемы.

Моя догадка заключается в том, что мне нужно, чтобы Django принимал заголовок multipart/form-data для отображения файлов, но я не уверен, где это можно исправить

Как упоминал @Brian Destura. Не указывать заголовки должно работать.

Также стоит отметить, что этот логический путь, где не указаны заголовки, является единственным, включенным в автоматизированные тесты для graphene-file-upload.

Наконец, в спецификации, на которую дана ссылка, нет примера, где заголовок требуется или даже включен.

References

https://github.com/lmcgartland/graphene-file-upload/blob/master/tests/test_django.py

https://github.com/jaydenseric/graphql-multipart-request-spec

Вернуться на верх