pip install flask-uploads
#先导入次此处需要用到的库: from flask_uploads import UploadSet, IMAGES, configure_uploads, ALL,patch_request_class from flask import request, Flask, redirect, url_for, render_template,abort import os #生成 app app = Flask(__name__) # 配置文件上传到的路径,以及限制上传文件的类型 app.config['UPLOADED_PHOTO_DEST'] = os.path.dirname(os.path.abspath(__file__)) app.config['UPLOADED_PHOTO_ALLOW'] = IMAGES # 实例化 UploadSet 对象 photos = UploadSet('PHOTO') # 将 app 的 config 配置注册到 UploadSet 实例 photos configure_uploads(app, photos) # 设置上传图片大小 #patch_request_class(app, 32 * 1024 * 1024) # 生成一个 upload 的路由 @app.route('/upload', methods=['POST', 'GET']) def upload(): if request.method == 'POST' and 'photo' in request.files: filename = photos.save(request.files['photo']) return redirect(url_for('show', name=filename)) return render_template('upload.html') # 生成一个 show 的路由 @app.route('/photo/<name>') def show(name): if name is None: abort(404) url = photos.url(name) return render_template('show.html', url=url, name=name) if __name__ == '__main__': app.run ()
upload.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method=POST enctype=multipart/form-data action="{{ url_for('upload') }}"> <input type=file name=photo> <input type=submit> </form> </body> </html>
show.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <img src="{{ url }}"/> </body> </html>
文件上传
HTML 表单中设置 enctype="multipart/form-data" 属性,已上传的文件被储存在内存或文件系统的临时位置。你可以通过请求对象 files 属性来访问上传的文件。每个上传的文件都储存在这个 字典型属性中。这个属性基本和标准 Python file 对象一样,另外多出一个用于把上传文件保存到服务器的文件系统中的 save() 方法。
from flask import request @app.route('/upload', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': f = request.files['the_file'] f.save('/var/www/uploads/uploaded_file.txt')
如果想要知道文件上传之前其在客户端系统中的名称,可以使用 filename 属性。但是请牢记这个值是 可以伪造的,永远不要信任这个值。如果想要把客户端的文件名作为服务器上的文件名, 可以通过 Werkzeug 提供的 secure_filename()函数:
from flask import request from werkzeug.utils import secure_filename @app.route('/upload', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': f = request.files['the_file'] f.save('/var/www/uploads/' + secure_filename(f.filename))