掌握Flask:上传与管理文件的指南

0 下载量 172 浏览量 更新于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应用的健壮性和安全性。