前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Cherrypy文件上传非ASCII文件

Cherrypy文件上传非ASCII文件

作者头像
py3study
发布2020-01-19 15:25:35
4270
发布2020-01-19 15:25:35
举报
文章被收录于专栏:python3

Cherrypy 版本: 18.0.1

由于某些特殊原因(可能是与标准兼容的问题),Cherrypy对上传文件的原文件名使用 ISO-8859-1 编码方式解码,导致非 ASCII 的文件名显示为乱码。

解决的方式也很简单,只需要对文件名使用 ISO-8859-1 编码然后在使用 UTF-8 重新解码即可。

以下是一个完整的例子:

代码语言:javascript
复制
 1 from os import makedirs
 2 from os.path import dirname, join as pathjoin, exists as pathexists
 3 from cherrypy import expose, quickstart, request, config
 4 
 5 HERE = dirname(__file__)
 6 UPLOAD_FOLDER = pathjoin(HERE, 'uploads')
 7 
 8 
 9 def repaire_filename(filename):
10     return filename.encode('ISO-8859-1').decode('utf-8', 'replace')
11 
12 
13 def save_uploadfiles(files, folder=UPLOAD_FOLDER):
14     if not pathexists(folder):
15         makedirs(folder)
16     if not isinstance(files, list):
17         files = [files]
18     for upload in files:
19         if not upload.filename:
20             continue
21         basename = repaire_filename(upload.filename)
22         filename = pathjoin(folder, basename)
23         with upload.file as upload_file, open(filename, 'wb') as to_save:
24             while True:
25                 buf = upload_file.read(8192)
26                 if not buf:
27                     break
28                 to_save.write(buf)
29 
30 
31 @expose
32 def index(upload_files=None):
33     if request.method == 'POST':
34         save_uploadfiles(upload_files)
35     return '''
36 <form method="POST" enctype="multipart/form-data">
37 <div><input name="upload_files" type="file" /></div>
38 <div><input name="upload_files" type="file" /></div>
39 <div><input name="upload_files" type="file" /></div>
40 <input type="submit" />
41 </form>
42 '''
43 
44 
45 if __name__ == '__main__':
46     quickstart(index)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/03/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档