Django管理员上传和图像到S3,然后调整图像大小和保存拇指问题
我有错误后尝试上传和调整图像到s3与pil和botos3和django default_storage错误。我正试图在管理员保存中执行此操作。Django管理员上传和图像到S3,然后调整图像大小和保存拇指问题
这里是代码:
from django.db import models
from django.forms import CheckboxSelectMultiple
import tempfile
from django.conf import settings
from django.core.files.base import ContentFile
from django.core.files.storage import default_storage as s3_storage
from django.core.cache import cache
from datetime import datetime
import Image, os
import PIL.Image as PIL
import re, os, sys, urlparse
class screenshot(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(max_length=200)
image = models.ImageField(upload_to='screenshots')
thumbnail = models.ImageField(upload_to='screenshots-thumbs', blank=True, null=True, editable=False)
def save(self):
super(screenshot, self).save() # Call the "real" save() method
if self.image:
thumb = Image.open(self.image.path)
thumb.thumbnail(100, 100)
filename = str(self.slug)
temp_image = open(os.path.join('tmp',filename), 'w')
thumb.save(temp_image, 'JPEG')
from django.core.files import File
thumb_data = open(os.path.join('/tmp',filename), 'r')
thumb_file = File(thumb_data)
new_file.thumb.save(str(self.slug) + '.jpg', thumb_file)
def __str__(self):
return self.title
这仅仅是在很多方面我都试图得到它的工作之一,我要么得到(2,“没有这样的文件或目录”)或其他一些错误。
请有人可以帮助我得到它的工作。我希望它使用django后端来上传图片的大小并保存为缩略图,然后保存。让我知道你是否需要知道任何信息。我很乐意使用django片段 - http://djangosnippets.org/snippets/224/,但我不知道用什么数据来提供它。即使主图像上传到s3,我也会得到相同的IOErrors和'没有这样的路径/文件名'。我也尝试过这样的事情:
myimage = open(settings.MEDIA_URL + str(self.image))
myimage_io = StringIO.StringIO()
imageresize = myimage.resize((100,100), Image.ANTIALIAS)
imageresize.save('resize_100_100_aa.jpg', 'JPEG', quality=75)
已经有3天的时间了,所以我现在开始备用!谢谢
你为什么不试试sorl-thumbnail。它具有与默认的ImageField django提供的完全相同的界面,看起来它比使用自己的支持更适合使用。
- 存储支持
- 可插拔引擎支持(PIL,pgmagick)
- 可插拔键值存储支持(Redis的,缓存DB)
- 可插拔的后台支持,
- 联系与可能的整合删除
- 虚拟世代
- 灵活简单的语法,不生成html
- 的ImageField的模型,删除缩略图
- CSS样式裁剪选项
- 保证金计算的垂直定位
我也有类似的问题,但在使用SORL-缩略图我的情况是不是一种选择。我发现我可以通过传入文件描述符而不是路径直接从S3BotoStorage打开一个图像。
所以不是
thumb = Image.open(self.image.path)
使用
thumb = Image.open(s3_storage.open(self.image.name))
然后你就可以处理并在本地保存新文件为你做之前。
感谢您的回答。想知道是否有办法使用django存储做类似的事情来抽象出它是否使用本地存储或s3存储。 – 2012-09-13 17:47:39
一旦我回家,我会试试这个。我试图让自己的,但我想用别人的更好的做法是一个更明智的做法! – Designer023 2011-03-14 09:49:01
我试过sorl-thumbnail,它太棒了!似乎无法让它在后端工作,但对于它所在的模板。感谢您的帮助:-) – Designer023 2011-03-18 09:56:07