2010-09-30 7 views
5

मेरे पास एक ऐसी साइट है जो उपयोगकर्ता को कुछ फ़ाइलों को डाउनलोड करने में सक्षम बनाती है। हालांकि मैं प्रत्येक फाइल के लिए एक डाउनलोड गिनती रखना चाहता हूं ताकि स्थिर फाइलों को एक अलग सबडोमेन पर रखकर सामान्य तरीके से जा रहा हो और फिर अपाचे को भारी उठाने देना एक तरीका नहीं है और साथ ही HttpResponse उपयोगकर्ता को उपडोमेन में रीडायरेक्ट करना अच्छा नहीं है क्योंकि तब उपयोगकर्ता उचित डाउनलोड यूआरएल देखता है और इसलिए डाउनलोड गिनती बढ़ाने के बिना फ़ाइल डाउनलोड कर सकता है। मैं सिर्फ एक दृश्य बना सकता हूं जो तब फ़ाइल() है, हालांकि मैं उस "big fat disclaimer" के बारे में चिंतित हूं। आप इसे कैसे कार्यान्वित करेंगे? मैं काफी शर्मिंदा हूं कि मैं उस समस्या के साथ अकेला नहीं हूं।django में तर्क के साथ स्थैतिक फाइलों की सेवा करना (डाउनलोडकाउंट रखना)

प्लेटफ़ॉर्म के बारे में: मैं अपाचे और mod_wsgi का उपयोग कर रहा हूं।

धन्यवाद

उत्तर

1

psj का उत्तर निश्चित रूप से एक व्यवहार्य विकल्प है। एक अन्य विकल्प जिसकी आपको जांच करनी चाहिए वह Perlbal जैसे अपाचे के विपरीत रिवर्स-प्रॉक्सी सर्वर डालना है जो "एक्स-रेप्रॉक्सी-यूआरएल" हेडर का समर्थन करता है।

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

0

मैं नहीं करने के लिए बहुत पहले Django-काउंटर के साथ ऐसा किया। आपको व्यवस्थापक में गिनती का ट्रैक रखने देता है। http://github.com/svetlyak40wt/django-counter/

+0

मैं एक अधिक सामान्य उत्तर की उम्मीद कर रहा था क्योंकि डाउनलोड गिनती केवल एकमात्र तर्क नहीं होगी :) – niklasfi

5

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

हमारे पास "क्लीनअप" क्रोनबॉज है जो सिल्लिंक को बनाए जाने के एक मिनट बाद साफ़ करता है, इसलिए यदि वे इसे फिर से डाउनलोड करना चाहते हैं, तो उन्हें Django से गुजरना होगा और इसे फिर से गिना होगा। अब, सैद्धांतिक रूप से वे उस समय में एक से अधिक बार डाउनलोड कर सकते हैं, लेकिन ऐसा होने की संभावना है? आप हर मिनट से अधिक साफ कर सकते हैं: अपाचे को डाउनलोड की शुरुआत में मौजूद सिम्लिंक की आवश्यकता होती है, पूरी चीज में नहीं।

मुझे यह जानकर उत्सुकता होगी कि अन्य इस समस्या को कैसे संबोधित करते हैं, क्योंकि मैं ओपी से सहमत हूं कि यह एक आम परिदृश्य है।

+0

यह एक अच्छा विचार की तरह लगता है, लेकिन मैं सभ्य यूआरएल-डिज़ाइन रखना चाहता हूं और उपयोगकर्ता को डाउनलोड करने में सक्षम बनाना चाहता हूं एक ही स्थान से दो बार फ़ाइल – niklasfi

+0

निश्चित है, लेकिन यह मॉडल अभी भी इसका समर्थन करता है। फ़ाइल के लिए कैनोनिकल यूआरएल Django- नियंत्रित यूआरएल है, जो लगातार और सभ्य इत्यादि है, और उपयोगकर्ता द्वारा देखे जाने वाला एकमात्र यूआरएल है। अपाचे-सेवित सिम्लिंक पर रीडायरेक्ट एक "नलसाजी विस्तार" है जिसे उपयोगकर्ता नोटिस नहीं करता है - ब्राउजर पारदर्शी रूप से रीडायरेक्ट का पालन करता है। – psj

1

यह करने का सबसे आसान तरीका अपाचे के एक्स-सेंडफ़ाइल हेडर का उपयोग करना है। बस हेडर का मान फ़ाइल पथ पर सेट करें और अपाचे आपके लिए फाइल भेज देगा। इस ब्लॉग पोस्ट में कुछ और विवरण हैं: http://francoisgaudin.com/2011/03/13/serving-static-files-with-apache-while-controlling-access-with-django/

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