在 Flask 中,如何获取上传文件的安全文件名?
时间: 2024-09-23 12:01:33 浏览: 27
Python使用Flask框架同时上传多个文件的方法
在Flask框架中,处理用户上传的文件通常涉及到使用`request.files`对象。当你接收POST请求并包含一个文件字段时,可以像下面这样获取安全的文件名:
```python
from flask import Flask, request
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def handle_upload():
file = request.files['file'] # 获取上传的文件
if file:
filename = secure_filename(file.filename) # 使用secure_filename函数给文件命名,防止路径漏洞
file.save('/path/to/save/' + filename) # 将文件保存到指定目录,并保留原文件名
return 'File uploaded successfully'
# Flask本身并没有提供secure_filename这个函数,你需要从werkzeug.utils导入
from werkzeug.utils import secure_filename
def secure_filename(filename):
"""
这是一个示例的secure_filename函数,实际应用中可能需要根据需求做更复杂的过滤
它会移除一些特殊字符,只保留字母、数字、下划线等
"""
filename = filename.strip() # 移除首尾空白
illegal_chars = set("'\/:*?\"<>|") # 禁止的字符集合
safe_chars = "-_.() %s/" % (string.ascii_letters + string.digits)
return ''.join(c for c in filename if c.isalnum() or c in safe_chars).strip('.')
```
在这里,`secure_filename`函数用于创建一个安全的文件名,以避免恶意攻击,如路径遍历或文件名注入。
阅读全文