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() 方法,可以轻松地实现文件上传功能。在后端处理上传的文件时,为了确保安全性,应该对文件类型进行检查和处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask 文件上传方法(详解版) - Python技术站

(2)
上一篇 2023年3月13日
下一篇 2023年3月13日

相关文章

  • CSS布局中如何组织样式表以便于简化、维护

    在设计网站布局时,良好的CSS组织结构可以让代码更容易维护和更新。以下是一些在CSS中组织样式表以便于简化、维护的攻略: 1. 使用命名约定 一种常见的CSS命名约定是BEM,即块(Block)、元素(Element)和修饰符(Modifier)。通过使用BEM约定,可以使CSS规则更加易于理解和修改。例如: /* 块 */ .navbar {} /* 元素…

    css 2023年6月10日
    00
  • JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)

    下面是“JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)”的攻略: 实现思路 本例中,我们需要通过鼠标事件监听和CSS动画实现,实现当鼠标经过一个元素时,弹出一个DIV框,并带有缓冲动画渐变效果。具体的实现步骤如下: 使用CSS定义一个弹出DIV框,并设置其初始状态为不可见。 监听需要触发弹出的元素的鼠标移入事件,并在事件处理函数中,使…

    css 2023年6月10日
    00
  • 浅谈CSS编程中的定位问题

    当我们在进行 CSS 编程的时候,定位问题是一个非常重要的环节。在这篇文章中,我们将会从如下三个方面来浅谈 CSS 编程中的定位问题: 定位类型 定位属性 定位示例 定位类型 在 CSS 中,有三种常见的定位类型,分别是: 静态定位(static) 相对定位(relative) 绝对定位(absolute) 其中,静态定位是默认的定位类型,相对定位是相对于元…

    css 2023年6月9日
    00
  • CSS伪类对象before和after的用法实例详解

    CSS伪类 :before 和 :after 的用法实例详解 什么是伪类 :before 和 :after :before 和 :after 是 CSS 伪类选择器,它们在 HTML 中的元素之前或之后插入一些内容,这些内容不在 HTML 标签中存在。 用法 使用 :before 或 :after 需要设置 content 属性。content 属性可以为文…

    css 2023年6月10日
    00
  • Flask Cookie 使用方法详解

    Flask 是一个 Python Web 框架,Cookie 是一个小型文本文件,由服务器发送给 Web 浏览器并保存在本地计算机上,用于跟踪用户。本文将详细介绍 Flask 中的 Cookie 处理,并提供代码示例。 Flask 的 Cookie 模块 Flask 的 Cookie 模块是 Flask 对 Python 标准库中 Cookie 模块的封装。…

    Flask 2023年3月13日
    00
  • JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)

    首先,我们需要了解一些基础知识,如何获取屏幕宽度和高度,浏览器窗口大小,以及网页的高度和宽度。在JavaScript中,我们可以使用以下方法获取这些信息: 获取屏幕宽度和高度: // 获取屏幕宽度和高度 var screenWidth = window.screen.width; var screenHeight = window.screen.height…

    css 2023年6月10日
    00
  • 五条非常重要的CSS技巧

    下面我就来为大家详细讲解一下“五条非常重要的CSS技巧”的完整攻略。 一、使用媒体查询实现响应式布局 当我们访问网站时,不同的终端设备有着不同的屏幕尺寸。为了确保网站在各种设备上都能正常显示,我们需要采用响应式布局。而媒体查询就是实现响应式布局的重要工具之一。 媒体查询可以通过CSS语法在我们的样式表中实现。我们可以用@media关键字定义一个媒体查询,并在…

    css 2023年6月9日
    00
  • jQuery UI旋转器部件Spinner Widget

    jQuery UI旋转器部件Spinner Widget攻略 jQuery UI的旋转器部件(Spinner Widget)可以提供一个高度可定制的数字输入框,用户可以通过拖拽或手动输入的方式修改数字值。以下是关于如何使用jQuery UI旋转器部件Spinner Widget的完整攻略。 安装jQuery UI库 在开始使用jQuery UI旋转器部件之前…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部