我有一个使用filepond的反应应用程序。 Filepond接受一个文件,并使用以下自定义标头将其POST到服务器:
const filepondServer = {
url: `${apiRoot}expenses/receipt_upload`,
process: {
headers: {
Authorization: `Token ${this.props.auth.token}`
}
}
};
这是一个django休息框架视图:
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
FilePond的作者在这里。
FilePond还将使用相同的字段名称发布文件的元数据对象。这在PHP上工作正常,但我不确定这在其他后端是否会很麻烦。我认为这是下面的错误试图表明的。
"request_post_body": {"filepond": "{}"}
在FilePond 3.7之前的版本中,将首先发布元数据。我在3.7中交换了这个,现在文件首先发布,所以我想知道你是使用3.7还是早期版本,如果这有任何区别。