我想提交一个表单以上传一个csv文件或一个excel文件,并提供表单中提供的其他信息,例如文字。
为了定义表单并发送请求,我将React Bootstrap与axios结合使用,对于api,我将Django 2.2与其他框架结合使用。
request.FILES
始终是空字典,即使我尝试将Content-Type标头设置为multipart/form-data
,然后在请求和打印request.data的发布数据中也找不到任何内容下面的.get('information')在Django日志中显示None
。请帮忙,任何支持将不胜感激。
有关代码段,请参见下文。
render()中的表单定义:
<form onSubmit={this.handleSubmit}>
<FormGroup>
<Form.Label>Upload file</Form.Label>
<Form.Control type="file" onChange={this.handleFile}></Form.Control>
</FormGroup>
<Button block bssize="large" disabled={!this.validateForm()} type="submit">
Submit
</Button>
</form>
处理文件更改:
handleFile = event => {
event.preventDefault();
const fileToUpload = event.target.files[0]
this.setState({
fileToUpload: fileToUpload
})
}
发送请求:
const payload = {
file: this.state.fileToUpload,
information: "somedata"
}
const contentType = "multipart/form-data"
let accessToken = token
var headers = {"Authorization" : `Bearer ${accessToken}`}
headers['Content-Type'] = contentType
const response = await axios({
method: "post",
data: payload,
url: url,
headers: headers
});
Django端点定义:
class RegisterData(views.APIView):
parser_classes = (parsers.JSONParser, parsers.MultiPartParser)
def post(self, request):
for file in request.FILES.values():
print(file)
info = request.data.get('information')
print(info)
return Response({"success": "Good job, buddy"})
答案 0 :(得分:0)