def upload_image(request, template_name='upload_image.html'):
""" 图片上传 """
img_list = OceanImg.objects.all()
import os
from utils.util import ImageNameUtil, ImageUtil
from django.core.files.base import ContentFile
MEDIA_ROOT = "http://badocean-picture.stor.sinaapp.com/"
try:
import sae
import tempfile
import sae.storage
from PIL import Image # 这里是关键,sae加载Image的方式
import StringIO
except:
pass
if request.method == 'POST':
annex = request.FILES.get('img', '')
attachment_title = os.path.splitext(annex.name)[0]
filename = datetime.now().strftime('%Y%m%d%H%M%S%f')
postfix = os.path.splitext(annex.name)[1]
thumbname = '%s_thumb%s' % (filename, postfix) # 缩略图名字
annex.name = '%s%s' % (filename, postfix) # 原图名字
s = sae.storage.Client()
ob = sae.storage.Object(annex.read())
url = s.put('picture', annex.name, ob)
# 保存缩略图
bucket = sae.storage.Bucket('picture')
content = bucket.get_object_contents(annex.name)
buf = StringIO.StringIO(content)
image = get_thumb_img(buf)
output = StringIO.StringIO()
image.save(output, 'JPEG')
bucket.put_object(thumbname, output.getvalue())
output.close()
OceanImg(
title=attachment_title,
img=annex.name, # 附件路径
thumb_img=thumbname, # 缩略图路径
).save()
return render_to_response(template_name, {
'img_list': img_list,
}, context_instance=RequestContext(request))
class OceanImg(models.Model):
'''图片表'''
title = models.CharField('照片说明', max_length=200)
img = models.ImageField(upload_to='cylimg', max_length=300)
thumb_img = models.ImageField(upload_to='cylimg', blank=True, null=True, max_length=300)
remark = models.TextField('备注说明', null=True, blank=True)
created = models.DateTimeField('创建时间', auto_now_add=True)
updated = models.DateTimeField('最后更新时间', auto_now=True)
class Meta:
verbose_name = u'图片墙'
verbose_name_plural = u'图片墙'
def get_accessory_url(self):
'''附件原图'''
return self.img.url
def get_thumbnail_url(self):
'''缩略图'''
try:
return self.thumb_img.url
except:
return self.get_accessory_url()
def delete(self):
try:
self.img.storage.delete(self.img.name)
self.thumb_img.storage.delete(self.thumb_img.name)
except Exception:
pass
super(OceanImg, self).delete()
def __unicode__(self):
return self.title
def __repr__(self):
return self.__unicode__()