Flask: Python上传文件的功能怎么做?

无论你是处理允许用户上传头像的社交媒体网站、管理用户文件的云存储服务,还是接收数据进行处理的企业应用程序,文件上传都是促进这些交互的基本功能。

Flask 是一个轻量级且灵活的 Python Web 框架,因其易用性和灵活性而成为开发人员的热门选择。它提供了一组强大的工具和库来处理各种任务,包括文件上传。使用 Flask ,你可以轻松处理上传的文件,验证它们的安全性,并将它们保存到服务器,所有这些都只需几行代码。

Flask 应用程序中上传的文件存储在 request.files 字典中。该字典的键是 HTML 表单中的文件输入字段的名称,而值是 FileStorage 实例。该类 FileStorageWerkzeug 库的一部分,Flask 在底层使用该库来处理请求和响应。

快速回顾一下如何在 Flask 路由中访问上传的文件:

from flask import request      @app.route('/upload', methods=['POST'])   def upload_file():       if 'file' in request.files:           file = request.files['file']           # Do something with the file   

在此代码中,'file'HTML 表单中的文件输入字段的名称。如果客户端使用此字段上传文件,你可以访问它 request.files['file']

Hello World

创建一个新的项目目录

mkdir flask_file_upload   cd flask_file_upload   

设置虚拟环境

python3 -m venv env   

激活虚拟环境

在 macOS 和 Linux 上:

source env/bin/activate   

在 Windows 上:

.\env\Scripts\activate   

安装 Flask

pip install flask   

设置基本的 Flask 应用程序

app.py

from flask import Flask      app = Flask(__name__)      @app.route('/')   def home():       return 'Hello, Flask!'      if __name__ == '__main__':       app.run(debug=True)   

运行

python app.py   

访问地址:http://localhost:5000

打开浏览器中导航到,你应该会看到 "Hello, Flask!"

设计文件上传表单

下面是用于文件上传的 HTML 表单的基本示例:

文件路径及文件名:templates/upload_form.html

<!DOCTYPE html>   <html>   <body>      <h2>Upload File</h2>   <form action = "/upload" method = "POST"      enctype = "multipart/form-data">      <input type = "file" name = "file" />      <input type = "submit"/>   </form>      </body>   </html>   
  • <input type = "file">: 创建一个文件输入字段,用户可以在其中选择要上传的文件

  • <input type = "submit">: 创建一个提交按钮,用户可以单击该按钮来提交表单

创建渲染上传表单的路由

from flask import Flask, render_template      app = Flask(__name__)      @app.route('/')   def home():       return render_template('upload_form.html')      if __name__ == "__main__":       app.run(debug=True)   

表单样式

创建处理文件上传的路由

路由是 /upload

from flask import Flask, render_template, request   from werkzeug.utils import secure_filename      app = Flask(__name__)      @app.route('/upload', methods=['POST'])   def upload_file():       if 'file' in request.files:           file = request.files['file']           filename = secure_filename(file.filename)           # Here you should save the file           file.save(path_to_save_file)           return 'File uploaded successfully'          return 'No file uploaded'      if __name__ == "__main__":       app.run(debug=True)   

然后就可以上传文件了,上传完会显示预定的提示语

在 Flask 中存储文件的最佳实践

  • 使用安全文件名

可以通过 secure_filename 函数来验证

from werkzeug.utils import secure_filename   secure_filename = secure_filename(file.filename)   
  • 设置专用上传文件夹

最好创建一个单独的上传目录,而不是将文件保存在应用程序的主目录中。这有助于使你的应用程序保持井井有条,并使管理上传的文件变得更加容易。你可以在 Flask 配置中设置上传文件夹:

import os      app.config['UPLOAD_FOLDER'] = 'path_to_your_upload_folder'      file.save(os.path.join(app.config['UPLOAD_FOLDER'], secure_filename))   
  • 限制对上传文件夹的访问

  • 考虑使用云存储服务

还可以自己再加功能

以下是有关如何进一步增强文件上传功能的一些想法:

  1. 文件处理:根据你使用上传文件的用途,你可能需要在文件上传后对其进行处理。例如,你可能想要调整上传的图像大小、解析上传的 CSV 文件或扫描上传的文件是否存在病毒。

  2. 进度条:对于大文件,你可能需要提供一个进度条,让用户知道上传的进度。实现这一点需要在前端使用一些 JavaScript。

  3. 多个文件上传:到目前为止,只介绍了一次上传一个文件。然而,HTML 允许用户在单个文件输入中选择多个文件,Flask 也可以在单个请求中处理多个文件。

  4. 拖放上传:为了增强用户体验,你可以实现文件上传的拖放界面。这还需要前端有一些 JavaScript。

  5. 数据库集成:如果你的应用程序使用数据库,你可能希望在数据库中记录有关上传文件的信息。例如,你可以存储文件名、上传日期以及上传文件的用户。

---------------------------END---------------------------

题外话

当下这个大数据时代不掌握一门编程语言怎么跟的上脚本呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值