- 采用了对源码进行修改,增加对中文的支持。
说明
- 使用环境
werkzeug 0.14.1
和python 3.6
。 - 关于
secure_filename()
的过滤代码写在\Python36\Lib\site-packages\werkzeug\utils.py
277 行开始。
初始代码
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('._')
最终代码
if isinstance(filename, text_type):
from unicodedata import normalize
filename = normalize('NFKD', filename).encode('utf-8', 'ignore') # 转码
if not PY2:
filename = filename.decode('utf-8') # 解码
for sep in os.path.sep, os.path.altsep:
if sep:
filename = filename.replace(sep, ' ')
# 正则增加对汉字和日语假名的部分(本人有需求)
# \u4E00-\u9FBF 中文
# \u3040-\u30FF 假名
# \u31F0-\u31FF 片假名扩展
_filename_ascii_add_strip_re = re.compile(r'[^A-Za-z0-9_\u4E00-\u9FBF\u3040-\u30FF\u31F0-\u31FF.-]')
filename = str(_filename_ascii_add_strip_re.sub('', '_'.join( # 新的正则
filename.split()))).strip('._')
测试效果
@blue_PushBlog.route('/upload', methods=['POST'])
def upload():
if request.method == 'POST':
f = request.files['file']
if f:
filename = secure_filename(f.filename) # Character
f.save(os.path.join('.', filename))
- 返回 JSON 的截图
版权声明:本文为qq_30490489原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。