flask中的secure_filename方法获取不到中文文件名

来源:互联网 发布:caffe softmax层 编辑:程序博客网 时间:2024/06/06 12:56

碰到以下问题:
将中文文件名传给 secure_filename 方法时所有的中文名都会被过滤掉,只剩下文件后缀名。
原因:werkzeug库的secure_filename方法中,中文被ignore或者压制导致数据缺失
解决方法:
1,要么更换或弃用中文文件名
2,视情况修改secure_filename方法的代码

def secure_filename(filename):    r"""Pass it a filename and it will return a secure version of it.  This    filename can then safely be stored on a regular file system and passed    to :func:`os.path.join`.  The filename returned is an ASCII only string    for maximum portability.    On windows systems the function also makes sure that the file is not    named after one of the special device files.    >>> secure_filename("My cool movie.mov")    'My_cool_movie.mov'    >>> secure_filename("../../../etc/passwd")    'etc_passwd'    >>> secure_filename(u'i contain cool \xfcml\xe4uts.txt')    'i_contain_cool_umlauts.txt'    The function might return an empty filename.  It's your responsibility    to ensure that the filename is unique and that you generate random    filename if the function returned an empty one.    .. versionadded:: 0.5    :param filename: the filename to secure    """    if isinstance(filename, text_type):        from unicodedata import normalize        filename = normalize('NFKD', filename).encode('ascii', 'ignore')        if not PY2:            filename = filename.decode('ascii')    for sep in os.path.sep, os.path.altsep:        if sep:            filename = filename.replace(sep, ' ')    filename = str(_filename_ascii_strip_re.sub('', '_'.join(                   filename.split()))).strip('._')    # on nt a couple of special files are present in each folder.  We    # have to ensure that the target file is not such a filename.  In    # this case we prepend an underline    if os.name == 'nt' and filename and \       filename.split('.')[0].upper() in _windows_device_files:        filename = '_' + filename    return filename
0 0
原创粉丝点击