from flask import Flask, render_template, request, send_from_directory, url_for
from flask_script import Manager
import os
# 允许上传的文件类型
ALLOWED_SUFFIX = set(['png', 'jpg', 'jpeg', 'gif'])
app = Flask(__name__)
# 上传文件保存位置
app.config['UPLOADED_FOLDER'] = os.path.join(os.getcwd(), 'static/upload')
# 请求大小(文件大小限制)
app.config['MAX_CONTENT_LENGTH'] = 1024 * 1024 * 8
manager = Manager(app)
# 判断是否是允许的文件类型
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_SUFFIX
@app.route('/')
def index():
return '原生文件上传'
# 展示上传的文件
@app.route('/uploaded/<filename>')
def upladed(filename):
# 安全的发送文件
return send_from_directory(app.config['UPLOADED_FOLDER'], filename)
@app.route('/upload/', methods=['GET', 'POST'])
def upload():
img_url = None
if request.method == 'POST':
# 获取上传对象
photo = request.files.get('photo')
# 保存前验证文件的类型
if photo and allowed_file(photo.filename):
# 拼接文件保存的完整路径名
pathname = os.path.join(app.config['UPLOADED_FOLDER'],
photo.filename)
# 保存上传文件,参数是文件保存的路径名
photo.save(pathname)
img_url = url_for('upladed', filename=photo.filename)
return render_template('upload.html', img_url=img_url)
if __name__ == '__main__':
manager.run()
html文件
{% if img_url %}
<img src="{{ img_url }}">
{% endif %}
<form method="post" enctype="multipart/form-data">
<input type="file" name="photo" /><br />
<input type="submit" value="上传" />
</form>