Cherrypy 版本: 18.0.1

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

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

以下是一个完整的例子:

 from os import makedirs
from os.path import dirname, join as pathjoin, exists as pathexists
from cherrypy import expose, quickstart, request, config HERE = dirname(__file__)
UPLOAD_FOLDER = pathjoin(HERE, 'uploads') def repaire_filename(filename):
return filename.encode('ISO-8859-1').decode('utf-8', 'replace') def save_uploadfiles(files, folder=UPLOAD_FOLDER):
if not pathexists(folder):
makedirs(folder)
if not isinstance(files, list):
files = [files]
for upload in files:
if not upload.filename:
continue
basename = repaire_filename(upload.filename)
filename = pathjoin(folder, basename)
with upload.file as upload_file, open(filename, 'wb') as to_save:
while True:
buf = upload_file.read(8192)
if not buf:
break
to_save.write(buf) @expose
def index(upload_files=None):
if request.method == 'POST':
save_uploadfiles(upload_files)
return '''
<form method="POST" enctype="multipart/form-data">
<div><input name="upload_files" type="file" /></div>
<div><input name="upload_files" type="file" /></div>
<div><input name="upload_files" type="file" /></div>
<input type="submit" />
</form>
''' if __name__ == '__main__':
quickstart(index)

最新文章

  1. 实例操作JSONP原理
  2. ThinkPhp 验证码不显示图片
  3. dell r710xd 通过远程管理卡安装系统
  4. R语言之中文分词:实例
  5. hdu----(5045)Contest(数位dp)
  6. freemarker编辑器eclipse插件
  7. 面试体验:Google 篇(转)
  8. kubuntu/ubuntu下安装fcitx输入法
  9. .Net程序员学用Oracle系列(9):系统函数(上)
  10. OPENCV基本滤波算法
  11. mongodb 面试题总结
  12. 【三分模板】洛谷P3382三分模板
  13. win10预览版无开始菜单解决方案
  14. 五十八、linux 编程——UDP 编程 广播
  15. 使用querybuilder做忽略大小写查询的例子
  16. python3 第二十五章 - comprehensions(推导式)
  17. Stetho简化Android调试(一)
  18. centos7 jmeter分布式安装
  19. 洛谷P2619 [国家集训队2]Tree I(带权二分,Kruscal,归并排序)
  20. mybatis 于 hibernate区别

热门文章

  1. Nginx 动静分离与负载均衡的实现
  2. Java 8中用法优雅的Stream,性能也&quot;优雅&quot;吗?
  3. 机器学习 GBDT+xgboost 决策树提升
  4. docker commit命令创建新的镜像
  5. SpringBoot入门教程(十)应用监控Actuator
  6. 初学Java Web(3)——第一个Servlet
  7. 补习系列(2)-springboot mime类型处理
  8. 开源库支付库Magicodes.Pay发布
  9. Linux下Tomcat开启查看GC信息
  10. springboot情操陶冶-web配置(三)