2013-02-04 14 views
5

(PIL kullanarak), ben şöyle benim Madde modeli için yöntem tasarruf geçersiz kılma ediyorum Amazon s3boto Depolama çalışmak için kaydetme yöntemi PIL Görüntü Alma:Django - yükleme işlemiyle birlikte resimlerinizin boyutunu amacıyla

def save(self): 
    super(Article, self).save() 
    if self.image: 
     size = (160, 160) 
     image = Image.open(self.image) 
     image.thumbnail(size, Image.ANTIALIAS) 
     image.save(self.image.path) 

Bu Yerel olarak çalışır, ancak bir hata alıyorum: NotImplementedError: Bu arka uç mutlak yolları desteklemiyor.

I

image.save(self.image.url) 

ile image.save hattı yerine güvenilir ama sonra elde IOError: [Errno 2] Böyle bir dosya ya da dizin: Doğru konumu 'https://my_bucket_name.s3.amazonaws.com/article/article_images/2.jpg'

resmin görüntüsü. Bu adresi tarayıcıya koyarsam, görüntü oralardadır. Başka şey denedim ama şu ana kadar şans yok.

+0

yerde sitenizde çalışan bu ilk defa mı yerel makinenizin yanı sıra başka? – Dave

+0

Evet. Bu. Niye ya? – KrisF

cevap

7

Mutlak yollara kaydetmekten kaçınmalısınız; Bu tür işlemleri sizin için özetleyen bir File Storage API var.

PIL Documentation görüntülendiğinde, save() işlevinin bir yol yerine dosya benzeri bir nesneyi iletmeyi desteklediği görülür.

ben bu kodu test edebilirsiniz bir ortamda değilim, ama ben size son satırın yerine böyle bir şey yapmak gerekir inanıyoruz:

from django.core.files.storage import default_storage as storage 

fh = storage.open(self.image.name, "w") 
format = 'png' # You need to set the correct image format here 
image.save(fh, format) 
fh.close() 
+0

Bunu denedim. Bir AttributeError var: 'NoneType' nesnesinin 'write' özelliği yoktur. Görünüşe göre fh = Yok – KrisF

+1

İlk satırı değiştirerek çalışıyorum. Yanıtınızı düzenleme onaylandıktan sonra kabul etme niyetiyle düzenlemeye çalıştım ancak düzenleme reddedildi. Emin değilim neden. Çalıştırmak için eklediğim/değiştirdiğim şey: django.core.files.storage import default_storage depolama alanı olarak fh = storage.open (self.image.name, "w") – KrisF

+0

@krisF teşekkürler yanıtım :) – minism

İlgili konular