掌握Flask:上传与管理文件的指南
41 浏览量
更新于2024-10-11
收藏 215KB ZIP 举报
资源摘要信息:"在Python的Flask框架中,实现文件上传和删除功能是常见的Web应用需求。以下将详细解释如何使用Flask进行文件上传和删除操作。"
1. Flask文件上传
在Flask框架中,文件上传功能可以通过定义一个HTML表单来实现,表单中必须包含`enctype="multipart/form-data"`属性。服务器端可以通过`request.files`来接收上传的文件。
首先,需要在Flask应用中导入必要的模块:
```python
from flask import Flask, request, redirect, url_for, flash, render_template
```
然后,创建一个用于上传文件的路由:
```python
from werkzeug.utils import secure_filename
import os
UPLOAD_FOLDER = '/path/to/the/uploads'
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
# 确保上传的文件名是安全的
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
# 渲染上传文件页面
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
# 检查是否有文件在请求中
if 'file' not in request.files:
flash('没有文件部分')
return redirect(request.url)
file = request.files['file']
# 如果用户没有选择文件,浏览器也会提交一个空的文件部分
if file.filename == '':
flash('没有选择文件')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('uploaded_file', filename=filename))
return render_template('upload.html')
```
在`upload.html`中,创建一个文件上传表单:
```html
<!doctype html>
<title>上传新文件</title>
<h1>上传新文件</h1>
<form method=post enctype=multipart/form-data>
<input type=file name=file>
<input type=submit value=上传>
</form>
```
`secure_filename`函数用于确保上传的文件名是安全的,避免例如路径遍历等安全问题。`allowed_file`函数用于检查上传的文件扩展名是否在允许的范围内。
2. Flask删除上传的文件
删除上传的文件功能同样可以在Flask中实现。在删除之前,我们需要一个路由来列出已上传的文件,以及一个用于删除操作的路由。
例如,列出上传的文件:
```python
@app.route('/uploads/<filename>')
def uploaded_file(filename):
return f'文件: {filename} 已上传'
```
然后,添加一个删除文件的路由:
```python
@app.route('/delete/<filename>', methods=['POST'])
def delete_file(filename):
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
if os.path.exists(file_path):
os.remove(file_path)
flash(f'文件 {filename} 已被删除')
else:
flash(f'文件 {filename} 不存在')
return redirect(url_for('upload_file'))
```
在`upload.html`中,可以添加一个删除按钮,当点击时将触发删除操作:
```html
<a href="{{ url_for('delete_file', filename=filename) }}"
onclick="return confirm('确定要删除这个文件吗?');">
删除文件
</a>
```
综上所述,通过HTML表单上传文件到服务器,并通过Flask的路由处理删除操作是相对直接的过程。关键在于对上传文件的管理和验证,以及对删除操作的安全性考虑。务必确保只有授权的用户才能执行删除操作,并且在删除之前进行了适当的确认,以防止误删除重要文件。在实际部署时,还需要考虑更多安全和异常处理的问题,确保Web应用的健壮性和安全性。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2012-06-19 上传
2011-05-20 上传
216 浏览量
428 浏览量
2013-07-09 上传
2023-03-13 上传
U盘失踪了
- 粉丝: 1w+
- 资源: 21
最新资源
- gcc4.4.7合集包
- MyPetShop.Web_weatherserviceref_mypetshop_web_asp.net_
- flex:Swagger模式验证器
- app.rar_PHP__PHP_
- bdd-example:我尝试使用 Cucumber js 作为轻量级框架进行测试
- Python库 | jirafs_graphviz-3.0.1-py3-none-any.whl
- 基于LSTM的图像描述研究和实现.zip
- INFO6270_Final_Project:Infro6270最终项目-在Halifax公共图书馆系统中扩展公共图书馆嵌入式社会工作者的实施
- JNI编程指南(实用1).zip
- quirc-master (1)_quirc_qr读取_
- exzeitable:通过Phoenix LiveView动态更新可搜索,可排序的数据表
- Python库 | jiradls-1.0-py3-none-any.whl
- Ogitor-开源
- poke:带有Redux和React-Pixi的Pokemon Red相似实验
- datasheet_bk2461芯片手册_bk2461芯片手册_V2_bk2461_BK2461芯片资料_
- avcodec:编码器解码器渲染器