上传文件
今天我们来看看如何在flask中处理文件上传,首先看看我们熟悉的html:
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form method="POST" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="提交">
</form>
</body>
</html>
这里是一个表单,主要enctype。flask中用request对象处理表单:
import os
from flask import Flask, render_template, request, redirect
from werkzeug import secure_filename # 用来确保不是恶意的文件名的
app = Flask(__name__)
app.config["UPLOAD_FOLDER"] = "upload" # 用来储存上传文件的文件夹
@app.route("/", methods=["GET", "POST"]) # 接受两种请求方法,GET和POST
def index():
if request.method == "GET":
return render_template("index.html")
else:
if 'file' not in request.files: # 查看是否有上传文件
flash('没有文件上传')
return redirect(request.url) # 重定向到发出请求的网址
file = request.files['file'] # 获取文件
if file.filename == '': # 判断文件名是否为空
flash('没有文件上传')
return redirect(request.url)
else:
filename = secure_filename(file.filename) # 确保文件名是安全的
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) # 保存文件
return redirect("/show?filename=" + filename)
@app.route("/show")
def show():
filename = request.args.get("filename") # 获取名为filename的参数值
return render_template("show.html", filename=filename)
if __name__ == "__main__":
app.run(debug=True)
注释皆在代码中。打开网页,假设我们选择了一个pip.txt文件:
然后我们点击提交,开到show页面:
这时显示出了文件名,好了,这次的教程就完毕了。