2009-09-21 11 views
5

मैं किसी ऐसे व्यक्ति को कार्ड बेचने का एक तरीका ढूंढ रहा हूं जिसमें एक अनूठा कोड होगा जो वे बाद में एक फ़ाइल (एमपी 3, पीडीएफ, इत्यादि) डाउनलोड करने के लिए उपयोग कर सकेंगे, मास्क सही फ़ाइल स्थान इसलिए फ़ाइल डाउनलोड करने वाला एक समझदार व्यक्ति फ़ाइल को एक से अधिक बार डाउनलोड नहीं कर पाएगा। बैंडविड्थ पर सहेजने के लिए अमेज़ॅन एस 3 पर फ़ाइल होस्ट करना अच्छा होगा जहां हमारा सर्वर सह-स्थित है।फ़ाइलों को डाउनलोड करने के लिए एक बार यूआरएल प्रदान करने के लिए Django/Python समाधान क्या है?

कोड के लिए मेरा विचार उन अद्वितीय कोडों को प्री-जेनरेट करना होगा जो कार्ड पर मुद्रित होंगे और उन डेटाबेस को स्टोर करेंगे जिनके पास एक फ़ील्ड भी हो सकता है जो फ़ाइल को डाउनलोड करने की संख्या को संग्रहीत करता है। इस तरह हम सेट कर सकते हैं कि हम उपयोगकर्ता को फ़ाइल डाउनलोड करने के लिए कितने प्रयास करेंगे।

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

मुझे लगता है कि मैं django.views.static.serve का उपयोग करके कुछ भी करने में सक्षम हो सकता हूं जो वास्तविक फ़ाइल और फ़ाइल डाउनलोड करने वाले उपयोगकर्ता के बीच प्रॉक्सी के प्रकार के रूप में कार्य करता है। इस विधि में एकमात्र कमी मुझे लगता है कि मुझे वास्तविक वेब सर्वर का उपयोग करने की आवश्यकता होगी और अमेज़ॅन एस 3 पर फ़ाइल को स्टोर करने में सक्षम नहीं होगा।

किसी भी सुझाव या विचारों की बहुत सराहना की जाती है।

उत्तर

2

आप कुछ सरल उपयोग कर सकते हैं जैसे कि mod_xsendfile। यह कार्यक्षमता अन्य लोकप्रिय वेबसर्वर जैसे lighttpd या nginx में भी उपलब्ध है।

यह इस प्रकार काम करता है: जब आपका एप्लिकेशन सक्षम होता है (उदा। एक छोटी सी PHP स्क्रिप्ट) एक विशेष प्रतिक्रिया शीर्षलेख भेज सकता है, जिससे वेबसर्वर स्थिर फ़ाइल की सेवा करता है।

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

3

साफ विचार। हालांकि, मैं एकल डाउनलोड विधि के खिलाफ चेतावनी दूंगा, क्योंकि इस बात की कोई गारंटी नहीं है कि उनका पहला डाउनलोड प्रयास सफल होगा। शायद इसके बजाय समय-समाप्ति विधि का उपयोग करें?

लेकिन यह निश्चित रूप से Django के साथ ऐसा करना संभव है। यहाँ बुनियादी दृष्टिकोण की एक रूपरेखा है:

  • इन फ़ाइलों
  • उपयोग किसी GET पैरामीटर जो जो फ़ाइल प्राप्त करने के लिए पहचान करने के लिए एक अद्वितीय स्ट्रिंग है की सेवा के लिए एक Django url सेटअप करें।
  • फ़ाइल तालिका को रखने के लिए एक डेटाबेस तालिका रखें जिसमें FileField है। यह तालिका फ़ाइल सिस्टम पर फ़ाइल के स्थान पर अद्वितीय तारों को मानचित्रित करती है।
  • डाउनलोड के रूप में फ़ाइल की सेवा करने के लिए, इस तरह ध्यान में रखते हुए प्रतिक्रिया हेडर सेट:

with open(path, 'rb') as f: 
    response = HttpResponse(f.read()) 
response['Content-Type'] = 'application/octet-stream'; 
response['Content-Disposition'] = 'attachment; filename="%s"' % 'insert_filename_here' 
return response 

जब से हम इस प्रयोग कर रहे हैं (path सेवा करने के लिए फ़ाइल का स्थान है) Django पृष्ठ फ़ाइल की सेवा करने के लिए, उपयोगकर्ता मूल फ़ाइल स्थान नहीं ढूंढ सकता है।

+0

यह सबसे बुनियादी दृष्टिकोण है, लेकिन यदि आप इनमें से बहुत सारी फाइलें करते हैं तो आपके सर्वर को चोट पहुंच सकती है, क्योंकि पूरी फाइल को वसा पायथन/डीजेगो सर्वर थ्रेड के माध्यम से स्ट्रीम किया जाना है। –

+0

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

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