http://pythonhosted.org/Flask-Uploads/
说明:flask-uploads扩展库可以很好帮助你解决上传文件时的问题,使用非常方便
安装:
pip install flask-uploads
配置:
from flask_uploads import UploadSet, IMAGES from flask_uploads import configure_uploads, patch_request_class # 文件上传 photos = UploadSet('photos', IMAGES) # 设置上传文件的地址 app.config['UPLOADED_PHOTOS_DEST'] = os.getcwd() # 上传的初始化 configure_uploads(app, photos) # 配置上传文件大小,默认64M,设置None则会采用MAX_CONTENT_LENGTH配置选项 app.config['MAX_CONTENT_LENGTH'] = 2 * 1024 * 1024 patch_request_class(app, size=None)
添加视图函数,如下:
route('/upload/', methods=['GET', 'POST']) def upload(): img_url = None if request.method == 'POST' and 'photo' in request.files: # 生成随机的文件名 suffix = os.path.splitext(request.files['photo'].filename)[1] filename = random_string() + suffix # 保存上传文件 photos.save(request.files['photo'], name=filename) # 获取上传图片的URL img_url = photos.url(filename) return render_template('upload.html', img_url=img_url)
.模板文件与原生文件上传相同
完整的文件上传
配置flask-uploads,同上
配置flask-wtf
from flask_wtf import FlaskForm from flask_wtf.file import FileField, FileRequired, FileAllowed from wtforms import SubmitField # 文件上传表单 class UploadForm(FlaskForm): photo = FileField(validators=[FileRequired(message='未选择文件'), FileAllowed(photos, message='只能上传图片')]) submit = SubmitField('上传')
添加视图函数
# 导入图片处理类库 from PIL import Image .route('/upload/', methods=['GET', 'POST']) def upload(): img_url = None form = UploadForm() if form.validate_on_submit(): # 生成随机的文件名 suffix = os.path.splitext(form.photo.data.filename)[1] filename = random_string() + suffix # 保存上传文件 photos.save(form.photo.data, name=filename) # 生成缩略图 pathname = os.path.join(app.config['UPLOADED_PHOTOS_DEST'], filename) # 1.打开文件 img = Image.open(pathname) # 2.设置尺寸 img.thumbnail((128, 128)) # 3.保存修改后的文件 img.save(pathname) # 获取上传文件的URL img_url = photos.url(filename) return render_template('upload.html', form=form, img_url=img_url)
添加模板文件
<html lang="en"> <head> <meta charset="UTF-8"> <title>完整的文件上传</title> </head> <body> <h1>图片上传,结合flask-wtf,flask-uploads,生成缩略图</h1> <form method="post" enctype="multipart/form-data"> {{ form.hidden_tag() }} {{ form.photo() }} {% for error in form.photo.errors %} <span style="color: red;">{{ error }}</span> {% endfor %} {{ form.submit() }} </form> {% if img_url %} <img src="{{ img_url }}" /> {% endif %} </body> </html>
PIL只支持python2.x版本,社区开发人员对其进行了维护,以支持python3.x,
使用时需要安装,方法如下:pip install pillow