Flask-сервер не может читать файл, загруженный запросом POST

У меня есть клиент React, который отправляет файл с помощью api apetch для конечной точки '/ dataset'.

import 'whatwg-fetch'; uploadData(csv) { this.dataset = csv; fetch('/dataset', { method: 'POST', body: this._fileToFormData(csv) }).then( (response) => { console.log(response); } ).catch( () => {} ); }; _fileToFormData(file) { var formData = new FormData(); formData.append('file', file); return formData }; 

Мой фляжный сервер должен забрать его.

 @app.route('/dataset', methods=['POST']) def dataset(): print request.get_data() csv_data = request.form['file'] print csv_data return '{ "fake_json":100}', 200 

Однако объект csv_data является просто строкой unicode, '[object File]'

Код

 print "form:", request.form print "files:", request.files 

возвращается

 ImmutableMultiDict([('file', u'[object File]')]) ImmutableMultiDict([]) 

Как получить фактическое содержимое файла CSV?

=== EDIT: Решено ===

переменная csv была фактически единственным массивом файлов, поэтому мне нужно было извлечь файл.

Загруженные файлы доступны в файле request.files , а не request.form . Значения являются файлоподобными объектами, поэтому для получения данных необходимо прочитать файл.

 data = request.files['file'].read() 

См. Документы Flask для некоторых примеров работы с загрузками.


Вам также необходимо загрузить файл правильно. Полифония Fit GitHub имеет пример использования FormData для правильного форматирования тела. Вы должны передать один файл или ввод для каждого append вызова.

 var input = document.querySelector('input[type="file"]') var data = new FormData() data.append('file', input.files[0]) fetch('/dataset', { method: 'POST', body: data }) 
Interesting Posts