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

 

 


分享到: 微信 更多