当 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.data
和 request.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 还是更早的版本,这是否有任何区别。
我有一个使用 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.data
和 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
这里是 FilePond 的作者。
FilePond 还将post 文件的元数据对象使用相同的字段名称。这在 PHP 上运行良好,但我不确定这在其他后端上是否会带来麻烦。我认为这就是下面的错误试图表明的。
"request_post_body": {"filepond": "{}"}
在 FilePond 3.7 之前的版本中,元数据将首先 posted。我在 3.7 中交换了这个,现在文件是 posted,所以我想知道你使用的是 3.7 还是更早的版本,这是否有任何区别。