Файлы (кроме pdfs) повреждены при загрузке django restframework api - PullRequest
0 голосов
/ 16 ноября 2018

Эй, у меня есть небольшая проблема.Я написал API-интерфейс django restframework для загрузки файлов в мой локальный каталог.Кажется, что он прекрасно работает, когда дело доходит до PDF, но любой другой тип формата повреждает файл и делает невозможным его открытие.

(включая png / jpg / любой другой формат изображения, файлы txt,файлы xlsx и т. д.) Файлы прекрасно сохраняются по правильному пути, они называются соответствующим образом без проблем

class UploadInvoiceFile(APIView):
     parser_classes = (FileUploadParser, MultiPartParser)

     def put(self, request, filename, specific_path='admin'):
         file_obj = request.data['file']
         file_path = settings.INVOICE_URL[admin]
         file = file_path+'/'+filename

         if not os.path.exists(file_path):
             os.makedirs(file_path)
         with open(file, 'wb+') as destination:
             for chunk in file_obj.chunks():
                 destination.write(chunk)



         return Response(status=204)

ОБНОВЛЕНИЕ: я обнаружил, что в файлах, которые усеяны, в них сохранены дополнительные материалы

------ WebKitFormBoundaryKDALl9LeBZb6xbOo Content-Disposition: form-data;Name = "файл";filename = "123.txt" Content-Type: text / plain

данные файла

------ WebKitFormBoundaryKDALl9LeBZb6xbOo -

1 Ответ

0 голосов
/ 17 ноября 2018

FileUploadParser предполагает, что входящий запрос является необработанным потоком байтов, и анализирует его в целом.Обычно он указан в списке в parser_classes, поскольку он активируется для любого типа входящих данных.

В вашем случае происходит то, что вы отправляете многочастный запрос, которыйFileUploadParser и все это - границы и все - сохраняются в виде файла.Следовательно, вы видите WebKitFormBoundary в файлах.

Вы должны удалить FileUploadParser из parser_classes и позволить MultiPartParser правильно проанализировать составной запрос.

class UploadInvoiceFile(APIView):
     parser_classes = (MultiPartParser, )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...