我想使用flask将我的csv文件保存在数据库中。在前端,我编写了一个函数,将csv文件发送到后端。这是代码:
saveCsvFile = () => {
console.log('saveCsvFile ...', this.state.csvFile);
axios.post( this.state.apiUrl+'/api/v1/SalesLead/saveCsv', {
'csv_file':this.state.csvFile,
}, {} )
};
<form>
<input onChange={this.fileHandler} type="file" accept=".csv,text/csv" />
<button onClick={() => this.saveCsvFile()} type="submit" form="form1" value="Submit">Submit</button>
</form>
我写了一个简单的函数来读取python(flask)中的csv文件。这是代码:
@SalesLeadController.route('/saveCsv', methods=['POST'])
def upload_csv():
print('upload_csv')
if request.method == 'POST':
csv_file = request.files['file']
csv_reader = csv.reader(csv_file, delimiter=',')
for row in csv_reader:
user = SalesLead(username=row[0], email=row[1])
db.session.add(user)
db.session.commit()
return Response(json.dumps({'status': 'success', 'message': 'data successfully saved.'}), status=200, mimetype='application/json')
但是上传CSV文件后出现此错误:
400 Bad Request: KeyError: 'file'
我该如何解决此错误?
答案 0 :(得分:0)
<form>
<input onChange={this.fileHandler} type="file" accept=".csv,text/csv" name = "file" />
</form>
因为您在做
csv_file = request.files['file']
此处,字符串“ file”是键,其中值是实际上传的文件。键是在HTML的输入标签中指定的名称
答案 1 :(得分:0)
我认为您忘记在表格上添加属性:
enctype="multipart/form-data"