Próbuję napisać program obsługi Django Rest Framework API, który może odbierać plik, a także ładunek JSON. Ustawiłem MultiPartParser jako parser obsługi.Korzystanie z Django Rest Framework, jak mogę przesłać plik ORAZ wysłać ładunek JSON?
Jednak wydaje się, że nie mogę zrobić obu. Jeśli wysyłam ładunek z plikiem jako żądanie wieloczęściowe, ładunek JSON jest dostępny w zniekształconym formacie w request.data (pierwsza część tekstu do pierwszego dwukropka jako klucz, reszta to dane). Mogę przesłać parametry w standardowych parametrach formularza - ale reszta mojego API akceptuje ładunki JSON i chciałem być konsekwentny. Request.body nie mogą być odczytywane jako podnosi *** RawPostDataException: You cannot access body after reading from request's data stream
Na przykład, plik i ten ładunek w organizmie żądanie:
{"title":"Document Title", "description":"Doc Description"}
staje:
<QueryDict: {u'fileUpload': [<InMemoryUploadedFile: 20150504_115355.jpg (image/jpeg)>, <InMemoryUploadedFile: Front end lead.doc (application/msword)>], u'{%22title%22': [u'"Document Title", "description":"Doc Description"}']}>
Czy istnieje sposób, aby to zrobić? Czy mogę zjeść moje ciasto, zachować je i nie przybrać na wadze?
Edytuj: Zasugerowano, że może to być kopia Django REST Framework upload image: "The submitted data was not a file". Nie jest. Przesyłanie i żądanie jest wykonywane wieloczęściowo i pamiętaj, że plik i przesłanie go jest w porządku. Mogę nawet wypełnić żądanie standardowymi zmiennymi formularza. Ale chcę sprawdzić, czy mogę zamiast tego uzyskać ładunek JSON.
możliwe duplikat [Django REST ramowego przesyłania obrazu: "Przedstawione dane nie był plik"] (http: //stackoverflow.com/questions/28036404/django-rest-framework-upload-image-the-submitted-data-was-not-a-file) –
Nie, nie jest. zredagowane pytanie wyjaśniające, dlaczego, chociaż nie widzę podobieństwa między tymi dwoma pytaniami oprócz bitu do przesyłania plików. – Harel
Należy zauważyć, że _'application/json' nie jest tym samym co 'multipart/form-data'_, nie można ich używać razem. A JSON nie obsługuje domyślnie przesyłania plików, musisz użyć niestandardowego pola pliku (i kodowania base64), aby uzyskać wsparcie przesyłania plików (tutaj pojawia się inne pytanie). Nie można wysyłać JSON z wieloczęściowymi danymi, ponieważ wieloczęściowy nie może w ogóle analizować JSON i JSON nie może parsować wieloczęściowego. –