python flask 框架 上传文件 中文名报错问题处理 uploadnotallowed
如果你在使用 Flask 上传文件时遇到了文件名为中文时报错的问题,这可能是由于 Flask 的 secure_filename 函数不支持非 ASCII 字符(包括中文)导致的。secure_filename 函数用于确保用户上传的文件名是安全的,但它会移除非 ASCII 字符。
解决这个问题的一种方法是在保存文件之前,将文件名转换为安全的 ASCII 字符串。你可以使用 Python 的 unidecode 库来实现这个功能。首先,你需要安装这个库,可以使用 pip:
pip install unidecode
然后,在你的 Flask 应用中,你可以这样使用 unidecode:
from unidecode import unidecode from werkzeug.utils import secure_filename @app.route('/upload', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': file = request.files['the_file'] file.filename = secure_filename(unidecode(file.filename)) file.save(f"/var/www/uploads/{file.filename}")
这样,即使文件名包含中文,unidecode 也会将其转换为相应的 ASCII 字符,然后 secure_filename 会确保文件名是安全的。