我有这个小例子脚本。它从HTML获取文件并将其上传到服务器。那部分工作正常。请参阅下面的脚本。
如果表单中没有选择任何文件,我想采取一些措施。如果在HTML表单中没有选择任何文件,我认为以下内容将评估为false,但它接缝始终为true。
if request.method == 'POST' and 'photo' in request.files:
是否选择了文件“返回文本”。
我在这里缺少什么?
任何提示都表示赞赏。
祝你好运 Kresten
from flask import Flask, render_template, request
from flask_uploads import UploadSet, configure_uploads, IMAGES
app = Flask(__name__)
photos = UploadSet('photos', IMAGES)
app.config['UPLOADED_PHOTOS_DEST'] = 'static'
configure_uploads(app, photos)
@app.route('/upload', methods=['GET', 'POST'])
def upload():
if request.method == 'POST' and 'photo' in request.files:
filename = photos.url(request.files['photo'])
fil = request.files['photo']
return 'Text to print'
return render_template('upload.html')
if __name__ == '__main__':
app.run(debug=True)
app.run(host='0.0.0.0')
HTML模板:
<html>
<head>
<title>Upload</title>
</head>
<body>
<form method=POST enctype=multipart/form-data action="{{ url_for('upload') }}">
<input type=file name=photo>
<input type="submit">
</form>
</body>
</html>
(感谢Danila拯救我的一天)
答案 0 :(得分:2)
在您的情况下,photo
始终位于request.files
,但filename
不会(可以是空字符串)。只需将条件更改为:
@app.route('/upload', methods=['GET', 'POST'])
def upload():
if request.method == 'POST' and request.files['photo'].filename:
filename = photos.url(request.files['photo'])
fil = request.files['photo']
return 'Text to print'
return render_template('upload.html')