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()