我让我的React客户端将带有fetch 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
返回
ImmutableMultiDict([('file', u'[object File]')])
ImmutableMultiDict([])
如何获取CSV文件的实际内容?
===编辑:解决===
变量csv实际上是单个文件数组,因此我需要提取文件。
答案 0 :(得分:3)
上传的文件位于FROM java:7
ADD name-ws.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
,而不是request.files
。这些值是类文件对象,因此要获取读取文件所需的数据。
request.form
有关使用上传的一些示例,请参阅Flask docs。
您还需要正确上传文件。 GitHub的fetch polyfill有一个使用data = request.files['file'].read()
正确格式化正文的示例。您必须将单个文件或输入传递给每个FormData
的调用。
append