- 一个 <form> 标签被标记有 enctype=multipart/form-data ,并且在里面包含一个 <input type=file> 标签。
- 服务端应用通过请求对象上的 files 字典访问文件。
- 使用文件的 save()方法将文件永久地保存在文件系统上的某处。
下面代码实现功能:上传文件到一个指定的文件夹里, 然后将这个文件显示给用户
import os from flask import Flask, request,redirect, url_for,send_from_directory from werkzeug.utils import secure_filename UPLOAD_FOLDER = '/path/to/the/uploads' ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif']) app = Flask(__name__) app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 16MB def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS @app.route('/', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': file = request.files['file'] if file and allowed_file(file.filename): filename = secure_filename(file.filename) file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) return redirect(url_for('uploaded_file',filename=filename)) @app.route('/uploads/<filename>') def uploaded_file(filename): return send_from_directory(app.config['UPLOAD_FOLDER'],filename)
UPLODED_FOLDER是我们储存上传的文件的地方,而 ALLOWED_EXTENSIONS 则是允许的文件类型的集合。
限制上传文件的后缀可以确保您的用户不能上传可能导致 XSS 问题(跨站脚本攻击XSS )的 HTML 文件。
我们永远不要相信用户的输入,试想一个人可以发送下列信息作为 filename 给您的应用:
filename = "../../../../home/username/.bashrc"
将这串字符与UPLODED_FOLDER 所指定的路径相连接,那么这个用户就可能有能力修改服务器文件系统上的一个文件,而他不应该拥有这种权限。
secure_filename() 函数则可以确保文件名的安全性,功能如下:
>>> secure_filename('../../../../home/username/.bashrc') 'home_username_.bashrc'
send_from_directory()函数能够提供对已上传文件的访问服务
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。