原生flask实现文件上传

关于原生Flask实现文件上传

上传配置

在这里我们设置上传文件夹地址、允许的文件扩展名、限制文件大小:

1
2
3
4
5
app.config['UPLOAD_FOLDER'] = os.path.join(__file__, 'uploads')
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

# 限制上传文件的大小,如果超出这个大小,会产生RequestEntityTooLarge异常,进而返回413错误(在开发服务器可能会直接断开连接)。
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 16MB

上传文件

简单来说,只有如下几个步骤:

  1. 创建一个上传表单:
    1
    2
    3
    4
    <form method="POST" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="Upload">
    </form>
  2. 当按下提交键后,通过request对象上的files获取文件,和request获取表单值一样,使用input字段的name值获取:
    1
    file_upload = request.files.get("file")    # 获取上传的文件
    这个file_upload就是上传的文件的对象,其有一些方法可以获取上传的文件的信息:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    # 获取上传文件的文件名
    file_upload.filename

    # 获取上传文件的内容
    file_upload.seek(0)
    file_upload.read() # 被read后,文件指针会指到最低,使用seek(0)将指针指到文件开头
    file_upload.seek(0)

    # 获取上传文件的大小
    file_upload.seek(0)
    len(file_upload.read()) # 计算文件内容大小,单位为字节
    file_upload.seek(0)

    # 获取上传文件的mimetype
    file_upload.mimetype
  3. 检查上传的文件
    1
    2
    def allowed_file(filename):
    return "." in filename and filename.resplit(".", 1)[1] in ALLOWED_EXTENSIONS
  4. 使用save方法保存文件,指定保存的地址及文件名:file.save(path + filename)
    上传上来的文件可以通过file.filename获取文件名。
    1
    2
    if file_upload and allowed_file(file_upload.filename):
    file_upload.save(os.path.join(app.config['UPLOAD_FOLDER'], file_upload.filename))

获取上传后的文件

配置一个函数来获取上传文件的url

1
2
3
4
5
from flask import send_from_directory

@app.route("/uploads/<filename>")
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename=filename)

获取url:

1
file_url = url_for("uploaded_file", filename=filename)
文章作者: Dar1in9
文章链接: http://dar1in9s.github.io/2020/03/10/flask/flask文件上传/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Dar1in9's Blog