2013-02-04 17 views
5

आदेश अपलोड पर छवियों का आकार करने के लिए (जनहित याचिका का प्रयोग करके), मैं इतना की तरह मेरे लेख मॉडल के लिए विधि बचाने अधिभावी कर रहा हूँ जनहित याचिका छवि विधि सेव हो रही है:Django - अमेज़न s3boto भंडारण के साथ काम करने

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) 

यह स्थानीय रूप से काम करता है लेकिन उत्पादन में मुझे एक त्रुटि मिलती है: NotImplementedError: यह बैकएंड पूर्ण पथ का समर्थन नहीं करता है।

मैं

image.save(self.image.url) 

साथ image.save लाइन की जगह करने की कोशिश की लेकिन फिर मैं प्राप्त एक IOError: [errno 2] इस तरह के कोई फ़ाइल या निर्देशिका: 'https://my_bucket_name.s3.amazonaws.com/article/article_images/2.jpg'

सही स्थान है हालांकि छवि के। अगर मैं ब्राउज़र में उस पते को डालता हूं, तो छवि वहां है। मैंने कई अन्य चीजों की कोशिश की लेकिन अब तक कोई भाग्य नहीं है।

+0

यदि आप पहली बार कहीं आपकी साइट चल रहा है अन्यथा आपकी स्थानीय मशीन के अलावा? – Dave

+0

हां। यह है। क्यूं कर? – KrisF

उत्तर

7

आपको प्रयास करना चाहिए और पूर्ण पथों को सहेजने से बचाना चाहिए; एक File Storage API है जो आपके लिए इस प्रकार के संचालन को सारणीबद्ध करता है।

PIL Documentation पर देखकर, ऐसा लगता है कि save() फ़ंक्शन पथ की बजाय फ़ाइल-जैसी ऑब्जेक्ट को पास करने का समर्थन करता है।

मैं ऐसा माहौल मैं इस कोड का परीक्षण कर सकते में नहीं हूँ, लेकिन मेरा मानना ​​है कि आप अपनी अंतिम पंक्ति के बजाय इस तरह कुछ करने के लिए की आवश्यकता होगी:

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

कोशिश की। एक विशेषता प्राप्त करें त्रुटि: 'noneType' ऑब्जेक्ट में कोई विशेषता 'लिखना' नहीं है। ऐसा लगता है कि एफएच = कोई नहीं – KrisF

+1

मुझे पहली पंक्ति बदलकर काम मिल गया। संपादन को मंजूरी मिलने के बाद मैंने इसे स्वीकार करने के इरादे से अपना उत्तर संपादित करने का प्रयास किया लेकिन संपादन अस्वीकार कर दिया गया। यकीन नहीं है कि क्यों। यह है कि मैंने इसे काम करने के लिए जोड़ा/बदला है: django.core.files.storage से डिफॉल्ट_स्टॉरेज को स्टोरेज fh = storage.open (self.image.name, "w") – KrisF

+0

@krisF धन्यवाद मेरे उत्तर को अपडेट किया गया :) – minism

संबंधित मुद्दे