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 会确保文件名是安全的。