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

Posted renfengjun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

最后问题得到解决。


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






以上是关于Django FileField 上传中文文件乱码的问题解决的主要内容,如果未能解决你的问题,请参考以下文章

ModelForm (Django) 中 FileField 上传的进度条

Django FileField 上传对我不起作用

在 Django 中保留 FileField 的原始文件名

在内联表单集中使用 Django FileField

Django 动态 FileField upload_to

django文件上传