##################################################################################
## 目录
##################################################################################
UploadFileRef
app.py
static
favicon.ico
templates
index.html
upload.html
uploads
##################################################################################
## app.py
##################################################################################
import os
# 渲染HTML模板,从flask使用请求对象,访问通过POST发送的数据。
# 重定向和url_for 用于一旦上传成功,重定向用户,
# send_from_directory有助于我们在浏览器send/show用户上传的文件。
from flask import Flask, render_template, request, redirect, url_for, send_from_directory
from werkzeug import secure_filename
# 初始化Flask应用程序
app = Flask(__name__)
# 上传文件存放的路径
app.config['UPLOAD_FOLDER'] = 'uploads/'
# 设置允许上传文件的扩展名(可以自行添加)
app.config['ALLOWED_EXTENSIONS'] = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
# 判断文件名带点并且扩展名是允许的名称
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1] in app.config['ALLOWED_EXTENSIONS']
# 该路由显示一个表单,jQuery执行一个AJAX request
# 装载jQuery,执行请求,执行上传操作
@app.route('/')
def index():
return render_template('index.html')
# 这个路由处理文件上传
@app.route('/upload', methods=['POST'])
def upload():
# 获得上传文件的名称
uploaded_files = request.files.getlist("file[]")
filenames = []
for file in uploaded_files:
# 检查文件是否是允许上传的文件
if file and allowed_file(file.filename):
# 产生安全的文件名,移除不支持的字符
filename = secure_filename(file.filename)
# 移动文件,从临时目录到我们创建的上传目录
file.save(os.path.join(app.config['UPLOAD_FOLDER'],filename))
# 保存文件名到列表,后面我们需要使用它
filenames.append(filename)
# 重定向用户到uploaded_file路由,它
# 在浏览器上显示基本的文件上传信息
# 用一个链接,每个已经装载的文件,装载一个html页面。
return render_template('upload.html', filenames=filenames)
# 该路由需要一个包含文件名的参数。
# 然后定位上传目录的文件,在浏览器上显示出来,
# 因此用户上传一个图像,那么这个图像在上传后可以显示
@app.route('/uploads/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'],
filename)
if __name__ == '__main__':
app.run(
host="0.0.0.0",
port=int("80"),
debug=True
)
##################################################################################
## templates/index.html
##################################################################################
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<link rel="shortcut icon" href="static/favicon.ico" type="image/x-icon"/>
<link rel="icon" href="static/favicon.ico" type="image/x-icon"/>
<title>Python Upload File</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file[]" size="50" multiple/> <br />
<input type="submit" value="上传文件" />
</form>
</body>
</html>
##################################################################################
## templates/upload.html
##################################################################################
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<link rel="shortcut icon" href="static/favicon.ico" type="image/x-icon"/>
<link rel="icon" href="static/favicon.ico" type="image/x-icon"/>
<title>Python Upload File</title>
</head>
<body>
<h2>上传的文件是</h2>
{% for filename in filenames%}
<p>{{ filename }}</p>
{% endfor %}
</body>
</html>