django wsgi centos httpd filefield imagefield 中文名 UnicodeEncodeError
http://yuanxiao.sinaapp.com/pages/122/127/352/article_index.html 这个是原来的解决办法
新发现的解决办法
#coding=utf-8 from django.core.files.storage import FileSystemStorage from django.db.models.fields.files import ImageFieldFile from django.core.files.base import ContentFile from django.conf import settings import Image,os, time, random,sys UPLOAD_TO='unload_img/%Y%m/%d'#%Y%m class ImageStorage(FileSystemStorage): def __init__(self, location=settings.MEDIA_ROOT, base_url=settings.MEDIA_URL): #初始化 super(ImageStorage, self).__init__(location, base_url) #重写 _save方法 def _save(self, name, content): import os, time, random #原来文件名 oldname= os.path.splitext(name)[0] #文件扩展名 ext = os.path.splitext(name)[1] #文件目录 d = os.path.dirname(name) #定义文件名,年月日时分秒随机数 fn = time.strftime('%Y%m%d%H%M%S') fn = fn + '_%d' % random.randint(0,100) #重写合成文件名 name = os.path.join(d, fn + ext) #调用父类方法 return super(ImageStorage, self)._save(name, content) def path(self, name): """ @des:主要是重载这个方法,解决 """ ipath = super(ImageStorage,self).path(name) ipath = ipath.encode('utf-8') return ipath
wsgi.py
# coding=utf8 import os import sys reload(sys) sys.setdefaultencoding('utf-8') sys.stdout = sys.stderr # 输出日志到apache,django中print的utf8格式的中文,任意格式的非中文到error.log中,注意这里不管制定没有制定错误日志文件,都是输出到error.log,ubuntu的apache error.log在/var/log/apache2/error.log sys.path.insert(0, '/home/sy/workspace/udserver/virtualenv/lib/python2.7/site-packages') from site import addsitedir #from django.core.handlers.wsgi import WSGIHandler from django.core.wsgi import get_wsgi_application os.environ['DJANGO_SETTINGS_MODULE'] = 'udserver.settings' sys.path.append('/home/sy/workspace/udserver/udserver/udserver') sys.path.append('/home/sy/workspace/udserver/udserver') sys.path.append('/home/sy/workspace/udserver') # addsitedir('/usr/local/lib/python2.7/dist-packages') addsitedir('/home/sy/workspace/udserver/virtualenv/lib/python2.7/site-packages') application = get_wsgi_application()