当 filepond 在 React 上发布文件时,Django Rest Framework returns 错误请求

Django Rest Framework returns bad request when POSTED a file by filepond on React

我有一个使用 filepond 的 React 应用程序。 Filepond 接受一个文件,并使用以下自定义 header:

将其发布到服务器
const filepondServer = {
  url: `${apiRoot}expenses/receipt_upload`,
  process: {
    headers: {
      Authorization: `Token ${this.props.auth.token}`
    }
  }
};

这将转到 django rest 框架视图:

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)

(我知道它需要充实错误等,但一旦它起作用就会出现)

这是一个 returns 400 错误,没有更多详细信息。如果我删除 receipt = request.data["file"] 行,它 returns 一个 201,并且服务器不会抱怨。

为了调试它,我尝试打印 request - 这工作正常,但 request.datarequest.FILES.

一样导致 400

错误非常简洁,它只是说:

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

这里是 FilePond 的作者。

FilePond 还将post 文件的元数据对象使用相同的字段名称。这在 PHP 上运行良好,但我不确定这在其他后端上是否会带来麻烦。我认为这就是下面的错误试图表明的。

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

在 FilePond 3.7 之前的版本中,元数据将首先 posted。我在 3.7 中交换了这个,现在文件是 posted,所以我想知道你使用的是 3.7 还是更早的版本,这是否有任何区别。