Flask 文件上传方法(详解版)

Flask 是一个轻量级的 Web 框架,提供了简洁的 API 和易于使用的工具,使得开发 Web 应用程序变得更加简单。

在本文中,我们将深入探讨 Flask 中的文件上传功能。

首先,在 Flask 中使用文件上传,需要用到 werkzeug 模块的 FileStorage 类。FileStorage 可以将上传的文件转换为特定类型的表示,以便在应用程序中进行处理。

接着,我们需要一个 HTML 表单来允许用户选择文件并将其上传到服务器。

HTML 表单的结构如下所示:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>文件上传</title>
  </head>
  <body>
    <h1>上传文件</h1>
    <form action="file_upload" method="post" enctype="multipart/form-data">
      <input type="file" name="file">
      <br><br>
      <input type="submit" value="上传">
    </form>
  </body>
</html>

在 form 标签中,我们设定了 action 属性为 file_upload,表明在提交表单时会将数据发送到 /file_upload 路由上进行处理。method 属性为 post,表示使用 POST 方法发送请求。enctype 属性为 multipart/form-data,是指表单中包含二进制数据(如上传的文件),需要使用该属性来指明表单数据的 MIME 类型。

在 input 标签中,type 属性为 file,表示允许用户选择文件进行上传。name 属性为 file,用于后端处理时的参数名。

现在,我们可以开始处理文件上传逻辑。在 Flask 中,我们需要使用 request.files.get() 方法来获取上传的文件。该方法将返回一个 FileStorage 对象,可以使用它的 save() 方法将文件保存到服务器上。

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('file_upload.html')

@app.route('/file_upload', methods=['POST'])
def file_upload():
    file = request.files.get('file')
    if file:
        file.save('uploads/' + file.filename)
        return '文件上传成功'
    else:
        return '上传失败,未选择文件'

if __name__ == '__main__':
    app.run()

在上面的代码中,我们使用了 index() 函数来渲染 HTML 表单。在文件上传时,接收到 POST 请求后将跳转到 file_upload() 函数进行处理。在 file_upload() 函数中,我们首先使用 request.files.get() 方法获取上传的文件,然后通过 save() 方法将文件保存到指定的文件夹中。

注意,这里的文件路径必须使用相对路径,因为 Flask 默认会将当前目录作为应用程序的根目录。

完整代码如下:

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('file_upload.html')

@app.route('/file_upload', methods=['POST'])
def file_upload():
    file = request.files.get('file')
    if file:
        file.save('uploads/' + file.filename)
        return '文件上传成功'
    else:
        return '上传失败,未选择文件'

if __name__ == '__main__':
    app.run()

需要注意的是,上传的文件可能会带来安全风险。例如,可能会上传恶意文件或文件名包含恶意代码。因此,我们应该对上传的文件进行检查和处理,以确保安全性。

为了检查上传的文件类型,可以使用 FileStorage 类的 content_type 属性。要限制文件类型,请使用 allowed_extensions 列表。

ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}

def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS

@app.route('/file_upload', methods=['POST'])
def file_upload():
    file = request.files.get('file')
    if file and allowed_file(file.filename):
        file.save('uploads/' + file.filename)
        return '文件上传成功'
    else:
        return '上传失败,文件类型不支持'

在上面的代码中,我们定义了 ALLOWED_EXTENSIONS 列表存储支持的文件类型扩展名。然后,我们定义了 allowed_file() 函数来检查上传的文件是否合法。该函数会检查文件名是否包含支持的扩展名。

如果文件类型合法,则将其保存到指定的文件夹中;否则,返回“文件类型不支持”的提示信息。

以上就是 Flask 文件上传的完整攻略。通过使用 request.files.get() 和 FileStorage 类的 save() 方法,可以轻松地实现文件上传功能。在后端处理上传的文件时,为了确保安全性,应该对文件类型进行检查和处理。

此文章发布者为:Python技术站作者[metahuber],转载请注明出处:https://pythonjishu.com/flask-file-upload/

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年 3月 13日 下午8:33
下一篇 2023年 3月 13日 下午8:36

相关推荐

  • Flask 模板使用方法详解

    Flask 是一个轻量级的 Python Web 框架,其提供了很多方便的工具,其中包括 Flask 模板方法。Flask 模板方法是 Flask 中主要用于渲染 HTML 页面的一种机制。在本文中,我们将详细介绍 Flask 模板方法的使用和一些代码示例。 Flask 模板的基本使用 在 Flask 中,模板文件存放在应用程序根目录中的 templates…

    Flask 2023年 3月 13日
    00
  • 用 Flask 实现发送电子邮件

    Flask 是一款轻量级的 Web 框架,非常适合快速开发小型 Web 应用。 在这篇文章中,我们将详细介绍如何在 Flask 应用中发送邮件。 安装 Flask-Mail 扩展 首先,我们需要安装 Flask-Mail 扩展来发送邮件。可以使用下面的命令来安装 Flask-Mail: pip install Flask-Mail 接下来,我们需要设置 Fl…

    Flask 2023年 3月 13日
    00
  • Flask WTF(表单处理)扩展详解

    Flask WTF是Flask框架的一个扩展,它提供了许多方便的功能来处理表单数据。 本文将详细介绍Flask WTF的使用方法。 安装 首先,需要使用pip安装Flask WTF扩展 pip install Flask-WTF 导入 在Flask应用中,需要导入Flask-WTF模块: from flask_wtf import FlaskForm fro…

    Flask 2023年 3月 13日
    00
  • Flask 扩展是什么?如何安装使用

    Flask 是一款轻量级的 Python Web 框架,拥有一定的灵活性和扩展性,可以让开发者根据自己的需求进行定制化开发。扩展是 Flask 框架的一个重要特性,可以为 Flask 提供更多的功能和能力。 本文将详细介绍 Flask 扩展的相关知识和使用方法,过程中会提供代码示例。 什么是 Flask 扩展? Flask 扩展是针对 Flask 应用程序的…

    Flask 2023年 3月 13日
    00
  • 详解 Flask 消息闪现方法

    Flask 消息闪现是指将一条消息存储到 session 中,然后在下个 HTTP 请求中进行显示,然后立即从 session 中删除这条消息。这在用户注册、登录、注销等场景下非常有用。 本文将为大家详细介绍 Flask 消息闪现的完整攻略,包括以下内容: 创建 Flask 应用 添加消息闪现功能 在模板中显示闪现消息 在视图函数中设置闪现消息 完整示例代码…

    Flask 2023年 3月 13日
    00
  • Flask SQLite(数据库引擎)使用方法详解

    Flask是一个Python实现的Web框架,它支持多种数据库,包括SQLite。SQLite是一种轻量级的数据库引擎,它没有独立的服务器进程,可以直接嵌入应用程序中,是一个非常方便的选择。 本文将介绍Flask如何使用SQLite,包括数据库连接、表的创建和操作等等。 安装相关包 首先需要安装相关包,包括Flask和SQLite的驱动程序,可以通过pip来…

    Flask 2023年 3月 13日
    00
  • Flask 路由(Route)使用方法详解

    Flask是一种轻量级的Python Web框架,它简单易用,适合快速开发小型Web应用。其中路由(Route)是Flask Web应用中最重要的部分,它可以帮助我们管理 URL 请求和响应,本文将详细介绍Flask路由的使用方法,并提供完整的代码示例。 Flask 路由的基本使用方法 我们可以通过在Flask应用实例上定义路由函数,来处理不同的URL请求。…

    Flask 2023年 3月 13日
    00
  • Flask URL构建方法详解

    Flask URL构建方法是一种用来创建URL链接的方法,它可以让我们更简单地构建和管理URL,同时也能够提高应用程序的可维护性和可扩展性。本文将详细介绍Flask URL构建方法的使用方法,包括URL构建方法的基本原理、使用示例、常见问题解答等。 Flask URL构建方法的基本原理 在Flask中,URL构建方法使用了基于路由名称的URL构建方法,即为每…

    Flask 2023年 3月 13日
    00
  • Flask 表单处理方法(含源码)

    Flask中表单处理是非常重要的一个功能。在这篇文章中,我们将会讲解如何使用Flask来处理表单。在我们开始之前,假定您已经熟悉Flask的基础知识,如创建应用程序、路由、模板等。 我们将会分为以下几个步骤介绍如何完成整个表单处理过程: 创建HTML表单 首先,我们需要在HTML页面上创建一个表单。表单需要有一个action,method和一个提交按钮。下面…

    Flask 2023年 3月 13日
    00
  • Flask 静态文件的配置方法(详解版)

    静态文件的意义 在 Web 应用开发中,静态文件(如图片、CSS、JavaScript 文件)是不随着请求数据的变化而改变的文件。这些文件的位置在 Web 应用的根目录下的 static 文件夹中,静态文件是浏览器端显示的一些基础组件,例如背景图片、图标、样式等。通过使用静态文件,Web 应用可以在浏览器端呈现更好的视觉效果和用户体验。 Flask 程序中静…

    Flask 2023年 3月 13日
    00