2011-08-25 12 views
9

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

मैंने पाया कि उनमें से एक तरीका बेस 64 प्रारूप को परिवर्तित कर रहा है। मैं इसका उपयोग नहीं करना चाहता क्योंकि मेरे परीक्षणों में, बेस 64 में परिवर्तित होने पर 74kb की छवि 110kb-120kb है।

तो क्या कोई मुझे समझा सकता है कि मैं उस ऑब्जेक्ट को कैसे पोस्ट कर सकता हूं जिसमें फाइलें हैं?

+0

मेरे कांटा पैच कि बहुखण्डीय रूपों के माध्यम से फाइल अपलोड https://github.com/nisc/django-tastypie – nisc

उत्तर

1

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

फ़ाइल अपलोड दृश्य के लिए आप स्वादिष्ट से बाहर निकलना चाहते हैं, और स्पष्ट रूप से दृश्य लिखना चाहते हैं।

तो फिर तुम एक मानक बहुखण्डीय प्रपत्र इस्तेमाल कर सकते हैं या तो, (और सिर्फ request.FILES सामान्य, या (और अधिक जटिल के रूप में), create a view that will accept the raw file content का उपयोग कर फ़ाइल का उपयोग

+3

अनुमति देते हैं में शामिल पर एक नज़र tastypie मैंने ImageField नामक एक संसाधन क्षेत्र देखा। हो सकता है कि यह फ़ाइल अपलोड को संभाल ले, लेकिन मुझे नहीं पता कि मेरे जेसन के अंदर फाइलें कैसे भेजें। –

5

यहाँ देखो:। https://github.com/toastdriven/django-tastypie/issues/42

ऐसा लगता है कि दृष्टिकोण थे कि कार्य करने की है, लेकिन बहुत अच्छी तरह से एक लंबे समय के विभिन्न समाधान के साथ प्रयोग करना (https://github.com/klipstein/django-tastypie/commit/e0f86ddffeb46c77704328a3b5899ec08e18e4eb, https://github.com/klipstein/django-tastypie/commits/form-data) फ़ाइल से निपटने tastypie मैं के लिए आया था के भीतर करने के बाद काम नहीं कर रहे।

निष्कर्ष यह है कि यदि आप प्रत्येक ब्राउज़र से फ़ाइल अपलोड का समर्थन करना चाहते हैं तो इसे सुन्दर तरीके से हल नहीं किया जा सकता है।

इस कांटा

https://github.com/ff0000/django-tastypie/commit/1fbc0a

+0

मैं वास्तव में यह नहीं समझ सकता कि वर्तमान स्थिति क्या है। हम किस तरह से tastypie फ़ाइलों को भेजना चाहिए? – Alper

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