博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask如何上传文件?
阅读量:425 次
发布时间:2019-03-06

本文共 1598 字,大约阅读时间需要 5 分钟。

文件上传的基本概念实际上非常简单:

  1. 一个 <form> 标签被标记有 enctype=multipart/form-data ,并且在里面包含一个 <input type=file> 标签。
  2. 服务端应用通过请求对象上的 files 字典访问文件。
  3. 使用文件的 save()方法将文件永久地保存在文件系统上的某处。

下面代码实现功能:上传文件到一个指定的文件夹里, 然后将这个文件显示给用户

import osfrom flask import Flask, request,redirect, url_for,send_from_directoryfrom werkzeug.utils import secure_filenameUPLOAD_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 # 16MBdef 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/
')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()函数能够提供对已上传文件的访问服务

转载地址:http://tjduz.baihongyu.com/

你可能感兴趣的文章