Django Rest Framework возвращает неверный запрос, когда POSTED файл filepond в React - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть приложение реагирования, которое использует filepond.Filepond принимает файл и отправляет его на сервер, используя следующий настраиваемый заголовок:

const filepondServer = {
  url: `${apiRoot}expenses/receipt_upload`,
  process: {
    headers: {
      Authorization: `Token ${this.props.auth.token}`
    }
  }
};

Это относится к представлению django rest framework:

class ExpenseReceiptUploadView(APIView):
    permission_classes = [permissions.IsAuthenticated, HasMetis]
    parser_classes = (FileUploadParser,)

    def post(self, request):
        receipt = request.data["file"]
        return Response(status=status.HTTP_201_CREATED)

(я знаю, что его нужно обновить)из-за ошибок и т. д., но это произойдет, как только это сработает)

Возвращает ошибку 400 без дополнительных подробностей.Если я удаляю строку receipt = request.data["file"], она возвращает 201, и сервер не жалуется.

Чтобы отладить это, я попытался напечатать request - это работает нормально, но request.data приводит к400, как и request.FILES.

Ошибка очень краткая, она просто говорит:

2018-12-21 00:01:35,850 [middlewares 70] INFO: {"method": "POST", "path": "/api/v1/operations/expenses/receipt_upload", "user": "Alex", "user_id": 27192835, "device_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36", "request_post_body": {"filepond": "{}"}}
2018-12-21 00:01:35,851 [log 228] WARNING: Bad Request: /api/v1/operations/expenses/receipt_upload
[21/Dec/2018 00:01:35] "POST /api/v1/operations/expenses/receipt_upload HTTP/1.1" 400 0

1 Ответ

0 голосов
/ 25 декабря 2018

автор FilePond здесь.

FilePond также будет публиковать объект метаданных файла, используя то же имя поля.Это прекрасно работает на PHP, но я не уверен, что это может быть неприятно на других серверах.Я думаю, это то, что пытается показать ошибка ниже.

"request_post_body": {"filepond": "{}"}

В версиях до FilePond 3.7 метаданные будут публиковаться первыми.Я поменял это в 3.7, теперь файл публикуется первым, поэтому мне интересно, используете ли вы 3.7 или более раннюю версию, и если это имеет какое-то значение.

...