मैं Turbogears 2 के साथ फ़ाइल अपलोड प्रबंधित करने के लिए 'सर्वोत्तम प्रथाओं' तरीके से काम करने का प्रयास कर रहा हूं और इस प्रकार वास्तव में कोई उदाहरण नहीं मिला है। मैंने वास्तव में फ़ाइल अपलोड करने का एक तरीका निकाला है, लेकिन मुझे यकीन नहीं है कि यह हमें कितना विश्वसनीय है।Turbogears के साथ फ़ाइल अपलोड 2
इसके अलावा, अपलोड की गई फाइलों का नाम पाने का एक अच्छा तरीका क्या होगा?
file = request.POST['file']
permanent_file = open(os.path.join(asset_dirname,
file.filename.lstrip(os.sep)), 'w')
shutil.copyfileobj(file.file, permanent_file)
file.file.close()
this_file = self.request.params["file"].filename
permanent_file.close()
तो मान लीजिए कि मैं सही ढंग से समझ रहा हूं, क्या ऐसा कुछ मूल 'नामकरण' समस्या से बच जाएगा? आईडी = यूयूआईडी।
file = request.POST['file']
permanent_file = open(os.path.join(asset_dirname,
id.lstrip(os.sep)), 'w')
shutil.copyfileobj(file.file, permanent_file)
file.file.close()
this_file = file.filename
permanent_file.close()
हां, 'uuid1()। हेक्स' या' uuid4()। हेक्स' नामकरण समस्या और अधिकांश सुरक्षा समस्याओं का समाधान करेगा। आपको uuid पर 'lstrip()' को कॉल करने की आवश्यकता नहीं है ('id' को एक चर नाम के रूप में उपयोग न करें - यह बिल्टिन आईडी()' मास्क करता है)। तो, एक अद्वितीय नाम उत्पन्न करने के लिए 'uuid' का उपयोग करें और अपलोड की गई डेटा को अपनी अपलोड निर्देशिका में उस नाम की फ़ाइल में कॉपी करें। यदि आपको उपयोगकर्ता द्वारा प्रदान की गई फ़ाइल नाम को स्टोर करने की आवश्यकता है, तो इसे अपने डेटाबेस में मेटा डेटा के रूप में सहेजें। ऐसे अतिरिक्त सुरक्षा मुद्दे हैं जिनका आप सामना करेंगे, जिनमें से कई का वर्णन यहां किया गया है: http://www.scanit.be/uploads/php-file-upload.pdf – mhawke
ऐ, आपकी मदद के लिए धन्यवाद mhawke। महान पढ़ें। आउटटा जिज्ञासा, यूयूआईडी 4() का उपयोग करने के लिए कोई वास्तविक कारण है, केवल यूयूआईडी 4() पर हेक्स? पूर्व यूआरएल और इसी तरह के उपयोग के लिए थोड़ा अधिक मानव अनुकूल यूयूआईडी उत्पन्न करता है। (मैं दो यूयूआईडी उत्पन्न करने के बारे में सोच रहा हूं, एक डाउनलोड यूआरएल के लिए और वास्तविक फ़ाइल नाम/आईडी के लिए दूसरा। –
फ़ाइल नाम की लंबाई के अलावा, 'uuid4()। हेक्स' बनाम' str (uuid4()) 'उतना ही कम है। मुझे यूआरएल और फाइलनाम के लिए स्वतंत्र यूयूआईडी रखने में कोई फायदा नहीं दिख रहा है क्योंकि आपको यूआरआईडी में वास्तविक फ़ाइल में यूयूआईडी को मैप करने के लिए अतिरिक्त परत की आवश्यकता होगी। – mhawke