1
我試圖在上傳到S3存儲桶之前使用PIL調整圖像大小。
模型表單工作得很好,除了圖像調整大小沒有發生。調整圖像大小,從Django模型表單上載到亞馬遜s3存儲桶之前調整圖像
以下是我的模型:
class ImageDetail(models.Model):
def upload_image(self, filename):
return u'obj/{name}.{ext}'.format(
name = uuid.uuid4().hex,
ext = os.path.splitext(filename)[1].strip('.')
)
flag = models.IntegerField(default=0)
view = models.IntegerField(default=0)
title = models.CharField(max_length=500, help_text="Enter a small/suitable title")
image = models.ImageField(upload_to = upload_image,
help_text="Please ensure, image size is less than 1 MB")
瀏覽文件,如下所示:
form = ImageUploadForm(request.POST or None, request.FILES or None)
if form.is_valid() and request.POST:
form_instance = form.save(commit=False)
img = form_instance.image
# process the image now
if img.width > 300 or img.height > 200:
IMG_TYPE = os.path.splitext(img.name)[1].strip('.').lower()
if IMG_TYPE == 'jpeg':
PIL_TYPE = 'jpeg'
FILE_EXTENSION = 'jpeg'
elif IMG_TYPE == 'jpg':
PIL_TYPE = 'jpeg'
FILE_EXTENSION = 'jpeg'
elif IMG_TYPE == 'png':
PIL_TYPE = 'png'
FILE_EXTENSION = 'png'
elif IMG_TYPE == 'gif':
PIL_TYPE = 'gif'
FILE_EXTENSION = 'gif'
else:
print 'Not a valid format'
return
im = Image.open(StringIO(img.read()))
im.thumbnail((300, 180), Image.ANTIALIAS)
#Save the image
temp_handle = StringIO()
im.save(temp_handle, PIL_TYPE)
s3 = S3Custom()
if not form_instance.image:
return self.success(self.request, form, None, errors = 'Error while uploading the image')
form_instance.save()
的S3自定義函數的定義如下:
class S3Custom(object):
conn = S3Connection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY)
b = Bucket(conn, settings.AWS_STORAGE_BUCKET_NAME)
k = Key(b)
def upload_file(self, ruta, prefix):
try:
self.k.key = '%s/%s' % (prefix, os.path.split(ruta)[-1])
self.k.set_contents_from_filename(ruta)
self.k.make_public()
except Exception, e:
print e
return '%s%s' % (settings.S3_URL, self.k.key)
我已經安裝了django-storage
。麻煩的是,圖像上傳得很好,但沒有正確調整大小。我錯過了什麼?我錯了嗎
im.save(temp_handle, PIL_TYPE)
s3 = S3Custom()
form_instance.save()
在視圖文件中? 請讓我知道,謝謝!
感謝您的回答,我無法弄清楚的問題是如何將圖像gettting上傳到AWS機器。 – whatf
懷疑你正在用'django-storages'做別的事情,但需要看到更多的代碼(例如'ImageUploadForm' ...) –