Я хочу сохранить свой CSV-файл в базе данных с помощью фляги. во внешнем интерфейсе я написал функцию для отправки файла csv в бэкэнд. вот код:
saveCsvFile = () => {
console.info('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>
И я написал простую функцию для чтения файла csv в python (flask). вот код:
@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'
Как я могу решить эту ошибку?






<form>
<input onChange = {this.fileHandler} type = "file" accept = ".csv,text/csv" name = "file" />
</form>
Поскольку вы делаете,
csv_file = request.files['file']
Здесь строка «файл» является ключом, где значением является фактически загруженный файл. Ключ — это имя, указанное во входном теге в HTML.
Я думаю, вы забыли добавить атрибут в форму:
enctype = "multipart/form-data"
Это не работает. Я все еще получаю эту ошибку в консоли
POST http://127.0.0.1:5000/api/v1/SalesLead/saveCsv 500 (INTERNAL SERVER ERROR)