Django FileField 上传中文文件乱码的问题解决

自己写了个自动化运维的小程序,使用docker+django发布项目,base image为centos7,python版本为2.7,django 1.11.5

由于项目中有上传附件的功能,发现上传包含中文的文件的时候,会出现乱码的问题。


寻遍网络,各种解决方案,包括

修改setting.py,修改相应的views.py加入

import sys
reload(sys)
sys.setdefaultencoding( 'utf8' )

修改docker运行的环境变量设置字符集

centos中已经安装了中文支持,并且上面的方案都无法解决问题。


还好,因为这个项目中只有这一个模块是需要上传附件的。


所以,可以选择修改源码的方式来解决问题。


根据报错,找到最后调用的python文件以及行数。

 /usr/lib64/python2.7/genericpath.py
18行报错
 os.stat(path)
修改为
 os.stat(path.encode("utf-8"))

再次上传发现

/usr/lib/python2.7/site-packages/django/core/files/storage.py
347行报错
fd = os.open(full_path, flags, 0o666)
修改为
fd = os.open(full_path.encode("utf-8"), flags, 0o666)

最后问题得到解决。


上传文件乱码问题,在网上没有找到解决方法,故记录下来,希望帮助更多的网友。






你可能感兴趣的:(Python)