from flask_uploads import IMAGES
from flask import Flask,render_template
from flask_script import Manager
from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm
from flask_wtf.file import FileField,FileAllowed,FileRequired
from wtforms import SubmitField
from flask_uploads import UploadSet
from flask_uploads import configure_uploads
from flask_uploads import patch_request_class
import os
app=Flask(__name__)
manager=Manager(app)
bootstrap=Bootstrap(app)
app.config['MAX_CONTENT_LENGTH']=1024*1024
app.config['UPLOADED_PHOTOS_DEST']=os.path.join(os.getcwd(),'static/img')
photos=UploadSet('photos',IMAGES)
configure_uploads(app,photos)
patch_request_class(app,size=None)
app.config['SECRET_KEY']='123456'
class UploadForm(FlaskForm):
photo=FileField('头像',validators=[FileRequired('请选择文件'),FileAllowed(photos,'只能上传图片')])
submit=SubmitField('上传')
@app.route('/')
def index():
return '完整的文件上传'
def random_name(length=5):
import random
base_str='1234567890'
return ''.join(random.choice(base_str) for i in range(length))
@app.route('/upload/', methods=['GET', 'POST'])
def upload():
img_url = None
form = UploadForm()
if form.validate_on_submit():
photo = form.photo.data
if photo:
suffix = os.path.splitext(photo.filename)[1]
filename = random_name() + suffix
photos.save(photo, name=filename)
from PIL import Image
pathname = os.path.join(app.config['UPLOADED_PHOTOS_DEST'], filename)
img = Image.open(pathname)
img.thumbnail((100, 100))
img.save(pathname)
img_url = photos.url(filename)
# return '上传成功'
return render_template('upload.html', form=form, img_url=img_url)
if __name__=='__main__':
manager.run()
{% extends 'bootstrap/base.html' %}
{% from 'bootstrap/wtf.html' import quick_form %}
{% block title %}文件上传{% endblock %}
{% block content %}
<div class="container">
{% if img_url %}
<img src="{{ img_url }}">
{% endif %}
{{ quick_form(form) }}
{# <form method="post" enctype="multipart/form-data">#}
{# <input type="file" name="photo">#}
{# <input type="submit" value="提交">#}
{# </form>#}
</div>
{% endblock %}