新浪 sae 上传图片 保存缩略图

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值