我的/templates
中有一个HTML表单,它将文本查询和文件上传作为输入。
HTML
<form action="/submitted" enctype=multipart/form-data method="POST" onsubmit="showDiv('loading')">
<input type="text" name="query" size="50" required><br>
<input type="file" id="fileSelect" name="file" accept=".csv">
<input type="submit" id="query_submit">
</form>
当enctype
设置为multipart/form-data
时,保存文件可以从烧瓶中运行,但访问request.form
会导致400错误,我读错误是由于缺少密钥错误。反之亦然,如果我删除enctype
,我会收到400错误,但可以访问包含查询的request.form
。
@app.route("/submitted", methods=['POST', 'GET'])
def submitted():
if request.method == 'POST':
result = request.form
query = result['query']
if not result['file']:
datapath = 'static/iris.csv'
plot_id = str(uuid.uuid1())
else:
f = request.files['file']
f.save(secure_filename(f.filename))
filename = secure_filename(f.filename)
f.save(os.path.join(app.config['UPLOAD_FOLDER'],\
filename))
return render_template("submitted.html")
以相同的形式读取多种输入类型(文本,文件)的正确方法是什么?或者我应该为文件单独表单?
谢谢!
答案 0 :(得分:1)
我发现了问题。在尝试访问request.form['file']
时检查是否没有上传文件。使用接受文件的表单,由于某种原因这是一个关键错误。所以我使用request.files
来检查丢失的文件。这是一个有效的/submitted
函数。
@app.route("/submitted", methods=['POST', 'GET'])
def submitted():
if request.method == 'POST':
result = request.form
query = result['query']
if 'file' not in request.files:
datapath = 'static/iris.csv'
plot_id = str(uuid.uuid1())
else:
f = request.files['file']
f.save(secure_filename(f.filename))
filename = secure_filename(f.filename)
f.save(os.path.join(app.config['UPLOAD_FOLDER'],\
filename))
return render_template("submitted.html")
答案 1 :(得分:0)
在路线/submitted
的功能中,您需要使用功能request.files
接收文件,使用request.form.get
接收常规数据