2013-08-15 6 views
6

Facepalm अद्यतन: बाहर कर देता है मैं भूल गया था/तथ्य यह है कि मैं अपनी डिफ़ॉल्ट भंडारण के रूप में https://github.com/gtaylor/django-athumb (यहां तक ​​कि से S3BotoStorage के एक पुराने कांटा उपयोग कर रहा था की अनदेखी हालांकि मैं django-storages स्थापित किया था)। Django-storages का वर्तमान संस्करण इस समस्या से पीड़ित नहीं है। समस्या यह थी कि जब वे बीओटी हिट करते हैं तो कंटेंट-टाइप हेडर यूनिकोड थे, और बीओटी एडब्ल्यूएस पर भेजने से पहले urllib.quoteplus का उपयोग करके यूनिकोड से निकलता है। यह वास्तव में बोटो की गलती नहीं है क्योंकि शीर्षकों को प्रति HTTP किसी भी तरह गैर-यूनिकोड तारों में परिवर्तित किया जाना है। अधिक इंडिपथ विश्लेषण के लिए https://github.com/boto/boto/issues/1669 देखें।फ़ाइलें S3BotoStorage साथ S3 पर अपलोड अंत के साथ invalidly सामग्री प्रकार मेटा डेटा भाग निकले

मूल प्रश्न

मैं अमेज़न S3 पर फ़ाइलें अपलोड करने संयोजन के रूप में उपयोग कर रहा हूँ django_storage's S3BotoStorage एक FileField के साथ।

downloadable_file = FileField(max_length=255, upload_to="widgets/filedownloads", verbose_name="file") 

सेटिंग्स में: यहाँ मेरी क्षेत्र है

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 

सब कुछ अपलोड करने के रूप में जहाँ तक काम करता है/डाउनलोड करने चला जाता है।

हालांकि, फाइलें मेरी बाल्टी में गलत सामग्री-प्रकार के साथ संग्रहीत हो रही हैं। जब मैं अपने एडब्ल्यूएस एस 3 कंसोल में फ़ाइलों के लिए मेटाडेटा देखता हूं, तो फ़ाइल का सामग्री-प्रकार "एप्लिकेशन/पीडीएफ" के बजाय "एप्लिकेशन% 2 एफपीडीएफ" के रूप में दिख रहा है, जो यह होना चाहिए।

Escaped content type

मामले में आप कहते हैं कि इससे कोई फर्क नहीं चाहिए, यह फर्क पड़ता है। Google क्रोम का अंतर्निहित पीडीएफ रीडर एक अवैध सामग्री-प्रकार के साथ पीडीएफ पर लटका होगा, और एक क्लाइंट इसे मेरे ध्यान में लाएगा।

Here's an example of a file uploaded through django-storages/boto. यदि आप क्रोम के अंतर्निर्मित पीडीएफ रीडर का उपयोग कर रहे हैं तो मुझे लगता है कि यह लटकता है, जैसे यह मेरे लिए और ग्राहक ने इसकी सूचना दी है। यदि आप गैर-क्रोम ब्राउज़र, या एडोब प्लगइन का उपयोग कर रहे हैं, या डिस्क पर फ़ाइल डाउनलोड कर रहे हैं तो आप शायद ठीक होंगे।

यदि मैं मैन्युअल रूप से एडब्ल्यूएस कंसोल के माध्यम से 'एप्लिकेशन/पीडीएफ' (मानक विकल्प में से एक) में सामग्री-प्रकार मेटाडेटा को बदलता हूं तो यह ठीक है।

मुझे लगता है कि यह फ़ाइल को अपलोड करने के लिए एडब्ल्यूएस पॉलिसी दस्तावेज़ बनाने के तरीके के साथ आंतरिक रूप से कुछ बग है, क्योंकि मैं यहां मानक उपयोग के बाहर कुछ भी नहीं कर रहा हूं। हालांकि, मैंने बोटो कोड के माध्यम से कदम रखा है और यह नहीं पता कि यह वास्तव में भागने से कहां से निकलता है।

क्या कोई या तो काम के बारे में सुझाव दे सकता है, या मुझे बोटो में अपमानजनक कोड पर मार्गदर्शन कर सकता है ताकि मैं इसे पैच कर सकूं और पुल अनुरोध जमा कर सकूं?

Boto == 2.9.5 Django-भंडार == 1.1.8

उत्तर

1

समस्या यह है कि मैं जो तार ASCII (के रूप में HTTP के लिए आवश्यक यूनिकोड तार धर्मान्तरित Django भंडार जो ठीक से उन Boto को भेजने से पहले यूनिकोड से तार करने के लिए सामग्री प्रकार हेडर रूपांतरण नहीं किया की एक काँटेदार/अप्रचलित संस्करण का उपयोग कर रहा था हेडर) urllib के quoteplus से बचने के तंत्र का उपयोग करके। समस्या django-storages के वर्तमान संस्करण में स्विच करके तय की गई थी।

मुद्दे के अधिक विस्तृत विश्लेषण देखें: https://github.com/boto/boto/issues/1669#issuecomment-27132112

3

नहीं अपने प्रश्न के लिए एक सीधा जवाब है, लेकिन शायद एक उपयोगी वैकल्पिक हल। मुझे एस 3 के साथ django-storages का उपयोग कर समस्याएं थीं। मैं cuddly-buddly कोशिश कर रहा था और इसके साथ काफी खुश हूं। लेखक ने डीजेंगो-स्टोरेज से एस 3 मॉड्यूल पर आधारित है और इसमें काफी सारे फिक्स जोड़े गए हैं। मैंने cuddly-buddly commits के माध्यम से ब्राउज़ किया और सामग्री-प्रकार शीर्षलेख को प्रभावित करने वाले कुछ संशोधन थे, लेकिन मैं एक नई django परियोजना स्थापित किए बिना पीडीएफ अपलोड के साथ परीक्षण नहीं कर सकता। हालांकि, मैं यह सत्यापित कर सकता हूं कि Django के माध्यम से अपलोड की गई सभी फाइलें S3 मेटाडाटा में सामग्री-प्रकार फ़ील्ड में उलझन में नहीं हैं।

किसी कारण आप परीक्षण के लिए cuddly-buddly के लिए खत्म नहीं बदल सकते हैं के लिए, मुझे पता है और मैं सेटअप करने के लिए कुछ PDF को अपलोड करने के लिए एक सरल Django परियोजना की कोशिश करेंगे।

+0

पुरस्कार के लिए जा रहे अपने समय के बाद से इनाम निकलता जा रहा है और इस होनहार लग रहा है। मैं आपको बता दूंगा कि यह कैसे जाता है। –

+0

धन्यवाद, मैं शायद बहुत दूर भविष्य में पीडीएफ अपलोड के साथ गड़बड़ कर रहा हूं, इसलिए मुझे उम्मीद है कि यह भी काम करता है। – Fiver

+0

क्या यह काम नहीं करता है? – Fiver

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