2009-09-09 10 views
17

मैं अपने Django ऐप में अपने मॉडल में छवियों को जोड़ने की कोशिश कर रहा हूं।मैं अपने Django ऐप में व्यवस्थापक के माध्यम से जेपीजी फाइल क्यों अपलोड नहीं कर सकता /?

models.py

class ImageMain(models.Model): 
    product = models.ForeignKey(Product) 
    photo = models.ImageField(upload_to='products') 

विकास मोड में, हर बार जब मैं Django व्यवस्थापक के माध्यम से छवि अपलोड करने की कोशिश, मैं मिलती रहती है:

अपलोड एक वैध छवि। आपके द्वारा अपलोड की गई फ़ाइल या तो एक छवि या दूषित छवि नहीं थी।

मैं फिंक के माध्यम से libjpeg स्थापित और फिर बैल एक्स 10.5.7

from PIL import Image 
file = open('/Users/Bryan/work/review_app/media/lcdtvs/samsung_UN46B6000_front.jpg', 'r') 
trial_image = Image.open(file) 
trial_image.verify() 

ऐसा लगता है कि जेपीजी कि सत्र के आधार पर वैध है पर जनहित याचिका 1.1.6 स्थापित। हालांकि, यह लोड नहीं होता है। मैंने अन्य jpgs की कोशिश की है, वे या तो काम नहीं करते हैं।

क्या गलत हो सकता है?

मैं सफलतापूर्वक एक पीएनजी फ़ाइल अपलोड करने में सक्षम था।

उत्तर

17

क्या आपने सिस्टम पर पहले ही संकलित/स्थापित किए जाने के बाद libjpeg स्थापित किया था? शायद यह डिकोडर ठीक से नहीं मिल सकता है?

यहां निर्देश दिए का एक सेट मैं libjpeg हो रही है और जनहित याचिका MacOS पर अच्छी तरह से खेल रहे हैं पर पाया है (अंत में देखते हैं; आप स्पष्ट रूप से डिकोडर का dir स्थापित करने के लिए आवश्यकता हो सकती है जैसा दिखता है):

http://djangodays.com/2008/09/03/django-imagefield-validation-error-caused-by-incorrect-pil-installation-on-mac/

+0

मैं पहली बार libjpeg स्थापित किया था। – BryanWheelock

0

मुझे यह समस्या थी हालांकि लिनक्स पर मैक नहीं, इसलिए हो सकता है कि वह बहुत विशिष्ट जानकारी न दे। हालांकि आपको libjpeg-devel की भी आवश्यकता हो सकती है (यदि मैक के लिए कोई संवाददाता है)।

यह भी सुनिश्चित करें कि सिस्टम से पूरी तरह से अपने वर्तमान पीआईएल स्थापना को शुद्ध करें। और यह सुनिश्चित करने के बाद कि libjpeg ठीक से स्थापित है, फिर build_ext -i के साथ पीआईएल को पुनर्स्थापित करें। फिर पीआईएल के selftest.py को जांचने के लिए चलाएं कि क्या यह जेपीईजी त्रुटि देता है।

1

सिर्फ
sudo easy_install जनहित याचिका

इस जनहित याचिका अपने ओएस के लिए विशिष्ट स्थापित हो जाएगा है। कृपया सुनिश्चित करें कि /usr/local/lib/python2.6/dist-packages/ में उत्पन्न अंडा फ़ाइल में अंडे की जानकारी है (क्योंकि जब मैंने वही किया, तो अंडा फ़ाइल सही नहीं थी)। यदि नहीं तो पीआईएल-बिल्ड-विशिष्ट-नाम का नाम केवल पीआईएल में बदलें और dist-packages फ़ोल्डर में एक PIL.pth फ़ाइल जोड़ें। PIL.pth फ़ाइल में पीआईएल लिखें और आप

16

मुझे उबंटू सर्वर में एक ही समस्या से मुलाकात की, तो आप इसे पीआईएल से पहले libjpeg-dev इंस्टॉल करके ठीक कर सकते हैं।

sudo apt-get install libjpeg-dev 
sudo pip install PIL --upgrade 

और यदि आपने पहले ही पीआईएल के बाद libjpeg-dev स्थापित किया है। तो आप पहले पीआईएल को हटा सकते हैं, और निम्नलिखित के रूप में पीआईएल को पुनर्स्थापित करने का प्रयास करें।

sudo pip uninstall PIL 
sudo apt-get install libjpeg-dev 
sudo pip install PIL 

यह मेरे लिए काम करता है, और उम्मीद है कि यह आपके लिए काम करता है।

+0

मुझे तकिया भी स्थापित किया गया था - और libjpeg-dev स्थापित करने के बाद अनइंस्टॉल/पुनर्स्थापित करना पड़ा। – stephendwolff

+0

यह मेरे लिए काम नहीं किया। Libjpeg-dev के साथ भी, वर्चुअलएन्व में पीआईएल का निर्माण अभी भी "जेपीईजी समर्थन उपलब्ध नहीं है" की रिपोर्ट करता है। – Cerin

+0

बहुत बहुत धन्यवाद! यह त्रुटि मुझे पागल कर रही थी। पीआईएल का नवीनतम संस्करण, फ़ाइल से एक ही जेपीईजी पूरी तरह से अच्छी तरह से पढ़ता है, लेकिन स्ट्रिंगियो से किसी भी तरह से नहीं! आपकी नुस्खा ने इसे एक बार ठीक किया। –

0

डीजेगो PIL नामक फ़ोल्डर से पीआईएल आयात करने की कोशिश कर रहा है, लेकिन पीआईएल खुद को एक फ़ोल्डर में स्थापित करता है उदा। PIL-1.1.7-py2.6-macosx-10.6-universal.egg, इसलिए आयात विफल रहता है - जो Django (या पीआईएल?) भ्रष्ट छवि के रूप में व्याख्या करने लगते हैं।

एक साधारण सिमलिंक

host:~ user$ cd /Library/Python/2.6/site-packages 
host:site-packages user$ ln -vis PIL-1.1.7-py2.6-macosx-10.6-universal.egg PIL 
create symbolic link `PIL' to `PIL-1.1.7-py2.6-macosx-10.6-universal.egg' 

पर एक मैक OSX 10.6.x MBP मेरे लिए यह तय किया है। लिनक्स मशीनों पर, फ़ोल्डर को dist-packages कहा जा सकता है और /usr/lib/python/ या उसके नीचे हो सकता है, लेकिन विचार समान है।

आप अक्सर उस फ़ोल्डर को पा सकते हैं जहां पाइथन मॉड्यूल आमतौर पर here वर्णित के रूप में स्थापित होते हैं।

0

'पायथन-वी' फिर 'आयात _imaging' यह पता लगाने के लिए उपयोगी है कि _imaging.so कहाँ से लोड किया गया है। यदि आप साइट-पैकेज में पीआईएल डीआईआर को साफ किए बिना पीआईएल को पुनर्स्थापित करते हैं तो आप अभी भी पुरानी _imaging.so के साथ चल रहे हैं पाइथन पैकेज डीआईआर के तहत। पीआईएल का selftest.py पास होगा, क्योंकि आपके पास अपने निर्माण डीआईआर में एक नया _imaging.so है। और सुनिश्चित करें कि आप सही समय पर सही हेडर और .so निर्देशिकाओं को चुनने के लिए setup.py में JPEG_ROOT संपादित करें।

1

मुझे उबंटू 11.04 पर एक ही समस्या थी। जाहिर है उबंटू 11 में, ऐसा लगता है कि आपको libjpeg या libjpeg62 की बजाय libjpeg8-dev की आवश्यकता है। Guilumes के लिए धन्यवाद http://gpiot.com/ubuntu-9-10-install-pil-in-virtualenv/

2

नोट, किसी को भी उबंटू पर वर्चुअलएन्व के साथ यह त्रुटि प्राप्त करने के लिए, this पोस्ट सहायक है।

असल में, उबंटू उन स्थानों पर साझा वस्तुओं को स्थापित करता है जिनके बारे में पीआईपी नहीं जानता है। इस मामले में, पीआईपी सिस्टम पुस्तकालयों को/usr/lib में होने की अपेक्षा करता है, लेकिन उबंटू उन्हें/usr/lib/x86_64-linux-gnu, या कुछ अन्य वास्तुकला-निर्भर स्थान में रखता है।

sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/ 
sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/ 
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/ 

यह Ubuntu 12.04 पर मेरे लिए त्रुटि को ठीक:

अल्पकालिक ठीक बस/usr/lib में पुस्तकालयों सिमलिंक है।

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