मेरे पास पाइथन/बोतल का उपयोग करके एक आरईएसटी फ्रंटेंड लिखा गया है जो फ़ाइल अपलोड को नियंत्रित करता है, आमतौर पर बड़े होते हैं। एपीआई इस तरह से wirtten है कि:बोतल (या फ्लास्क या इसी तरह) का उपयोग कर स्ट्रीमिंग फ़ाइल अपलोड करें
ग्राहक फ़ाइल के साथ एक पेलोड के रूप में भेजता है। अन्य चीजों के अलावा, यह दिनांक और प्राधिकरण शीर्षलेख भेजता है। यह रीप्ले हमलों के खिलाफ एक सुरक्षा उपाय है - अनुरोध यूआरएल, तिथि और कई अन्य चीजों का उपयोग करते हुए अस्थायी कुंजी के साथ गाया जाता है
अब समस्या। अगर अनुरोध की तारीख 15 मिनट की डेटाटाइम विंडो दी जाती है तो सर्वर अनुरोध स्वीकार करता है। यदि अपलोड में काफी समय लगता है, तो यह स्वीकार्य समय डेल्टा से अधिक होगा। अब, बोतल दृश्य विधि पर सजावटी का उपयोग कर अनुरोध प्राधिकरण हैंडलिंग किया जाता है। हालांकि, अपलोड समाप्त होने तक बोतल प्रेषण प्रक्रिया शुरू नहीं करेगी, इसलिए प्रमाणीकरण लंबे अपलोड पर विफल रहता है।
मेरा प्रश्न है: क्या अनुरोध तुरंत संभालने और अपलोड को स्ट्रीम करने के लिए बोतल या डब्लूएसजीआई को समझाने का कोई तरीका है? यह मेरे लिए अन्य कारणों से भी उपयोगी होगा। या कोई अन्य समाधान? जैसा कि मैं इसे लिख रहा हूं, डब्ल्यूएसजीआई मिडलवेयर दिमाग में आता है, लेकिन फिर भी, मुझे बाहरी अंतर्दृष्टि चाहिए।
मैं फ्लास्क, या यहां तक कि अन्य पायथन फ्रेमवर्क पर स्विच करने के लिए तैयार हूं, क्योंकि आरईएसटी फ्रंटेंड काफी हल्का है।
आप
मैं कुछ ऑपरेटिंग सिस्टम (मेरे मामले उबंटू 14.10 में) जोड़ दूंगा, अगर आप खुले (फ़ाइल नाम, 'ए') करते हैं, तो तलाश करें() आपके पॉइंटर को नहीं ले जायेगा। संलग्न करने के लिए लागू किया जाएगा और आप हमेशा आने वाले खंड को फ़ाइल के अंत में संलग्न करेंगे। – Drachenfels
@ petrus-jvrensburg आपका उत्तर मेरी ज़रूरत के लिए बहुत अच्छा है, लेकिन मुझे आश्चर्य है कि फ्लास्क इस मामले में अनुरोध को कैसे मिश्रित नहीं कर सकता है कि दो उपयोगकर्ता एक ही समय में एक ही फ़ाइल नाम अपलोड करते हैं?क्या आपको दो उपयोगकर्ताओं की पहचान करने के लिए सत्र तंत्र को कार्यान्वित करना है या क्या कुछ अंतर्निहित http/nginx/uwsgi/flask प्रॉपर्टी है जो सही कॉल विधि के अनुरोध को सही तरीके से मैप करती है? आपके सहयोग के लिए धन्यवाद! –
@CyrilN। इसके बारे में सोचा नहीं है। लेकिन अगर आपके पास पहले से ही आपके ऐप के लिए कुछ प्रमाणीकरण स्थापित है, तो इसका उपयोग करें। अन्यथा आप एक साथ उपयोगकर्ताओं के बीच अंतर करने के लिए 'request.remote_addr' और 'request.user_agent' से पूछताछ कर सकते हैं। –