无论你是处理允许用户上传头像的社交媒体网站、管理用户文件的云存储服务,还是接收数据进行处理的企业应用程序,文件上传都是促进这些交互的基本功能。
Flask
是一个轻量级且灵活的 Python Web
框架,因其易用性和灵活性而成为开发人员的热门选择。它提供了一组强大的工具和库来处理各种任务,包括文件上传。使用 Flask
,你可以轻松处理上传的文件,验证它们的安全性,并将它们保存到服务器,所有这些都只需几行代码。
Flask
应用程序中上传的文件存储在 request.files
字典中。该字典的键是 HTML
表单中的文件输入字段的名称,而值是 FileStorage
实例。该类 FileStorage
是 Werkzeug
库的一部分,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))
-
限制对上传文件夹的访问
-
考虑使用云存储服务
还可以自己再加功能
以下是有关如何进一步增强文件上传功能的一些想法:
-
文件处理:根据你使用上传文件的用途,你可能需要在文件上传后对其进行处理。例如,你可能想要调整上传的图像大小、解析上传的 CSV 文件或扫描上传的文件是否存在病毒。
-
进度条:对于大文件,你可能需要提供一个进度条,让用户知道上传的进度。实现这一点需要在前端使用一些 JavaScript。
-
多个文件上传:到目前为止,只介绍了一次上传一个文件。然而,HTML 允许用户在单个文件输入中选择多个文件,Flask 也可以在单个请求中处理多个文件。
-
拖放上传:为了增强用户体验,你可以实现文件上传的拖放界面。这还需要前端有一些 JavaScript。
-
数据库集成:如果你的应用程序使用数据库,你可能希望在数据库中记录有关上传文件的信息。例如,你可以存储文件名、上传日期以及上传文件的用户。
题外话
当下这个大数据时代不掌握一门编程语言怎么跟的上脚本呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典