使用Flask框架实现文件上传到服务器的简易教程

2 下载量 127 浏览量 更新于2024-09-01 收藏 104KB PDF 举报
"Flask入门教程,讲解如何实现文件上传到服务器的功能,通过Python的Flask框架和Werkzeug库实现安全的文件保存,并提供一个简单的HTML上传界面。" 在Web开发中,允许用户上传文件是一项常见的功能。Flask是一个轻量级的Python Web框架,它提供了处理文件上传的能力。在本文中,我们将学习如何使用Flask和Werkzeug库实现文件上传到服务器的示例。 首先,我们需要导入必要的模块: - `Flask`:Flask框架的主类。 - `render_template` 和 `request`:Flask内建的两个辅助函数,分别用于渲染模板和获取HTTP请求数据。 - `secure_filename`:来自Werkzeug库,用于确保上传的文件名是安全的,避免恶意文件名。 - `os`:Python标准库,用于处理操作系统相关的路径操作。 接下来,我们创建一个Flask应用实例并定义一个路由 `/upload`,该路由支持POST和GET两种请求方法。当用户访问这个URL时,会显示一个文件上传表单。如果用户通过POST提交了文件,应用将接收文件并保存到服务器。 在`@app.route('/upload', methods=['POST', 'GET'])`下面的函数中: 1. 检查请求方法是否为POST,如果是,那么获取请求中的文件对象,通过`request.files['file']`来获取用户选择的文件。 2. 使用`os.path.dirname(__file__)`获取当前脚本所在的目录,以便我们知道在哪里保存文件。 3. 使用`os.path.join()`创建一个安全的文件保存路径,包括一个名为'uploads'的子目录(如果不存在,需先创建)以及通过`secure_filename()`处理过的文件名。 4. 调用`f.save(upload_path)`保存文件到指定路径。 5. 如果请求方法不是POST,返回渲染后的`upload.html`模板,显示文件上传表单。 HTML部分,`upload.html`,是一个简单的表单,包含一个文件输入框和提交按钮。`<form>`标签的`enctype`属性必须设置为`'multipart/form-data'`,因为这是上传文件所必需的MIME类型。 注意:在实际应用中,还需要对上传的文件进行更多的安全检查,例如验证文件类型、大小等,防止恶意文件的上传。此外,为了生产环境的稳定性和安全性,通常会添加错误处理和日志记录。 总结来说,这个示例展示了如何使用Flask和Werkzeug实现一个简单的文件上传功能,包括接收文件、保存文件到服务器以及创建一个简单的上传界面。在实际开发中,需要根据项目需求扩展和优化这个基础结构。