Flask 服务器无法读取 POST 请求上传的文件
Flask server cannot read file uploaded by POST request
我有我的 React 客户端 post 一个文件,其中提取 api 到“/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
};
我的 Flask 服务器应该会接收它。
@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
returns
ImmutableMultiDict([('file', u'[object File]')])
ImmutableMultiDict([])
如何获取 CSV 文件的实际内容?
=== 编辑:已解决 ===
变量csv实际上是一个文件数组,所以我需要将文件提取出来。
上传的文件在 request.files
中可用,在 request.form
中不可用。这些值是类似文件的对象,因此要获取您需要读取文件的数据。
data = request.files['file'].read()
有关处理上传的一些示例,请参阅 Flask docs。
您还需要正确上传文件。 GitHub 的 fetch polyfill 有一个使用 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
})
我有我的 React 客户端 post 一个文件,其中提取 api 到“/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
};
我的 Flask 服务器应该会接收它。
@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
returns
ImmutableMultiDict([('file', u'[object File]')])
ImmutableMultiDict([])
如何获取 CSV 文件的实际内容?
=== 编辑:已解决 ===
变量csv实际上是一个文件数组,所以我需要将文件提取出来。
上传的文件在 request.files
中可用,在 request.form
中不可用。这些值是类似文件的对象,因此要获取您需要读取文件的数据。
data = request.files['file'].read()
有关处理上传的一些示例,请参阅 Flask docs。
您还需要正确上传文件。 GitHub 的 fetch polyfill 有一个使用 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
})