2011-01-31 15 views
6


यह वैचारिक प्रश्न और अंतर्निहित प्रोग्रामिंग तकनीक के बारे में नहीं है।PHP: नया रिकॉर्ड बनाने के दौरान एक तस्वीर अपलोड करना

जब मैं एक नया रिकॉर्ड बनाने की प्रक्रिया में हूं (एक रिकॉर्ड रिकॉर्ड स्क्रीन कहें), तो रिकॉर्ड आईडी अभी तक मेरे लिए उपलब्ध नहीं है। एक ही स्क्रीन में SWFUpload का उपयोग करके भी एक तस्वीर अपलोड करने का विकल्प होता है - जिसका अर्थ है कि चित्र तुरंत अपलोड हो जाता है।

चूंकि रिकॉर्ड आईडी अभी तक उपलब्ध नहीं है, इसलिए इस विशेष तस्वीर को डीबी में रिकॉर्ड के साथ जोड़ने का कोई तरीका नहीं है जब तक कि मैंने बटन को हिट नहीं किया है।

अब मान लीजिए, तस्वीर अपलोड करने के बाद मैं सर्वर पर एक अनाथ चित्र फ़ाइल छोड़कर रिकॉर्ड स्क्रीन जोड़ें से दूर नेविगेट करता हूं।

मैं रिकॉर्ड स्क्रीन को वापस देख सकता हूं और इसे चालू रख सकता हूं ... और अनलिंक/अप्रयुक्त छवियों के साथ सर्वर स्पेस का एक बड़ा हिस्सा खा सकता हूं।

आप इस मुद्दे से कैसे निपटेंगे? यहां तर्क का प्रवाह किस प्रकार लागू किया जाना चाहिए?

एक विकल्प (जो मैं अभी के साथ प्रयोग कर रहा हूँ), एक tmp फ़ोल्डर और में अपलोड किए गए चित्रों को संग्रहीत करने के लिए उन्हें बाहर जाने के लिए और उन्हें एक और उचित फ़ोल्डर में रखकर एक बार रिकॉर्ड एक लिंक के साथ (बना दिया गया है है इसकी अंतिम विश्राम जगह में तस्वीर)। और फिर, tmp फ़ोल्डर से बचे हुए को साफ़ करने के लिए रात की क्रॉन नौकरियां चलाएं।

इस के लिए कोई अन्य उज्ज्वल और सुरुचिपूर्ण दृष्टिकोण?

धन्यवाद,
m^ई

उत्तर

3

किंडा वर्ष सवाल तो आप शायद यह समझ से बाहर है, लेकिन यह कैसे मैं इसे चारों ओर जाना है:

  1. एक क्षेत्र बनाएं में अपने डाटाबेस 0 (varchar) का डिफ़ॉल्ट मान के साथ ImgGuid कहा जाता छवि की पहचान। मैं आमतौर पर छवि विस्तार के साथ या बिना एक ग्रिड का उपयोग करता हूं। पथ कहीं और कॉन्फ़िगर किया जा सकता है।
  2. hfImgGuid बुलाया अपने अपलोड पेज में एक hiddenfield बनाएं (या जो भी) और डेटाबेस से ImgGuid मूल्य लोड करते हैं, कोई रिकॉर्ड नहीं है कि अगर मान 0
  3. अब अपने अपलोड हैंडलर की जांच करता है, तो मान 0 है में होना चाहिए, यदि ऐसा है तो इस छवि के लिए एक नया मार्गदर्शिका बनाएं और इसे पर अपने swfupload पर वापस लाएं और इस मान के साथ अपना hfImgGuid सेट करें। उपयोगकर्ता सत्र में भी ग्रिड स्टोर करें।
  4. जब उपयोगकर्ता 'सेव' दबाता है तो hfImgGuid मान 'ImgGuid' फ़ील्ड में सहेजा जाएगा और इसलिए आपकी छवि किसी रिकॉर्ड से जुड़ी है। जब उपयोगकर्ता अपनी तस्वीर को बाद में बदलना चाहता है तो आप केवल वर्तमान छवि को ओवरराइट करना चुन सकते हैं (या एक नया ग्रिड बना सकते हैं और पुराने को हटा सकते हैं लेकिन इस उदाहरण के लिए यह आसान है)
  5. केवल एक समस्या यह है कि जब कोई उपयोगकर्ता बनाता है 'नया रिकॉर्ड' और वह एक तस्वीर अपलोड करता है और फिर उस पृष्ठ को छोड़ने का फैसला करता है जिसे आप अपने आप को एक अनाथ छवि के साथ पाते हैं। तो यहां उपयोगकर्ता सत्र जगह में आता है। जब उपयोगकर्ता पृष्ठ सहेजता है तो आप सत्र से छवि को हटा सकते हैं, यदि उपयोगकर्ता इसे सहेजता नहीं है और सत्र समाप्त होता है तो आप मूल्यों को पढ़ सकते हैं और अनाथ छवियों को हटा सकते हैं।

मुझे आशा है कि आपको यह विचार मिल जाएगा, अगर आप इसे सही करना चाहते हैं तो यह बहुत जटिल हो सकता है और इसे करने के कई तरीके हैं, लेकिन एक अजाक्स-शैली अपलोड वास्तव में अच्छा दिखता है और पेशेवर पृष्ठ शायद ही कभी हैं इसके बिना मिला

+0

धन्यवाद मार्क। मेरा विचार कुछ हद तक समान दृष्टिकोण लेना था, लेकिन इससे यह बहुत स्पष्ट हो जाता है। –

0

फ़ाइल यह डिफ़ॉल्ट रूप से अस्थायी नाम पाने के लिए इसका इस्तेमाल या खुद का एक साथ ऊपर लिख अपलोड किया जाता है, इस अस्थायी नाम छवि के साथ कनेक्ट करने के लिए जब रिकॉर्ड सहेजा जाता है इस्तेमाल किया जाना चाहिए जब, रिकॉर्ड डाला गया फ़ाइल नाम रिकॉर्ड आईडी के आधार पर बदला जा सकता है, अस्थायी नाम बदल दिया गया है (हटाया गया है) ...

1

आप कुकी में सभी अपलोड किए गए आइटमों (या कुकीज़ में पथों को संग्रहीत करके समस्या का कम से कम हिस्सा समाप्त कर सकते हैं, यदि विभिन्न ब्राउज़रों का उपयोग कर रहे हैं) क्लाइंट कंप्यूटर पर।

वैकल्पिक रूप से, SWFUpload का उपयोग न करें, सादे पुराने HTML "इनपुट प्रकार = फ़ाइल" अपलोड का उपयोग करें, और संबंधित फ़ोटो के अतिरिक्त रिकॉर्ड निर्माण को लागू करें। जो तर्कसंगत रूप से संभावित गन्दा समस्या का सबसे साफ समाधान होगा।

+0

यूप। वेनिला एचटीएमएल आधारित अपलोड निश्चित रूप से यहां सबसे साफ होगा। दुर्भाग्यवश, AJAX अपलोडिंग सुविधा मेरे क्लाइंट द्वारा "मांग" है: डी तो मुझे इससे कोई रास्ता नहीं दिख रहा है। कुकी विचार अच्छा है .. लेकिन मुझे बाद में सफाई के लिए, मुझे लगता है कि कुछ tmp फ़ोल्डर में सब कुछ छड़ी है। –

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