अपनी ऐप में फ़ाइल अपलोड कैसे जोड़ें: स्टोरेज, सीमाएँ और सुरक्षा
अपनी ऐप में फ़ाइल अपलोड जोड़ने के लिए फ़ाइलें ऑब्जेक्ट स्टोरेज (एक bucket) में रखें, न कि सर्वर की डिस्क पर या डेटाबेस में, और डेटाबेस में फ़ाइल की key, नाम, आकार, प्रकार और मालिक के साथ एक छोटा रिकॉर्ड सेव करें। फ़ाइल का आकार और प्रकार सर्वर पर जाँचें, पहले से तय करें कि फ़ाइलें सार्वजनिक हैं (जैसे प्रोडक्ट फ़ोटो) या निजी (जैसे इनवॉइस), और निजी फ़ाइलें तभी दें जब पहले जाँच हो जाए कि माँगने वाला कौन है। AI ऐप बिल्डर में आप अपलोड फ़ीचर को एक प्रॉम्प्ट में बता सकते हैं; ज़रूरी हिस्सा यह टेस्ट करना है कि फ़ाइलें रीडिप्लॉय के बाद बची रहती हैं और गलत व्यक्ति उन्हें नहीं खोल सकता।
तय करें कि आपको किस तरह के अपलोड चाहिए
बनाने से पहले तीन सवालों के जवाब दें:
- कौन सी फ़ाइलें? प्रोफ़ाइल फ़ोटो, प्रोडक्ट इमेज, PDF, स्प्रेडशीट, ऑडियो, वीडियो। इससे प्रकार और आकार की सीमा तय होती है।
- इन्हें कौन देख सकता है? सब (एक सार्वजनिक गैलरी) या सिर्फ़ अपलोड करने वाला और एडमिन (कॉन्ट्रैक्ट, ID दस्तावेज़, क्लाइंट फ़ाइलें)।
- अपलोड के बाद क्या होता है? बस स्टोर करना, प्रीव्यू दिखाना, इमेज का आकार बदलना, या उसकी सामग्री पढ़ना।
सार्वजनिक इमेज और निजी दस्तावेज़ों के लिए अलग सेटअप चाहिए, इसलिए यह पहले तय करें।
फ़ाइलें कहाँ रहनी चाहिए
| विकल्प | यह कैसे काम करता है | किसके लिए अच्छा | किस बात का ध्यान रखें |
|---|---|---|---|
| ऑब्जेक्ट स्टोरेज (bucket) | फ़ाइलें ऐसी सेवा में रहती हैं जो इसी के लिए बनी है; आपका डेटाबेस key या URL रखता है | लगभग हर ऐप | एक्सेस नियम सही सेट होने चाहिए |
| प्लेटफ़ॉर्म का दिया स्टोरेज | आपका ऐप बिल्डर या होस्ट आपके लिए bucket चालू करता है | उस प्लेटफ़ॉर्म पर बनी ऐप | सीमाएँ और कीमत प्लेटफ़ॉर्म के हिसाब से |
| सर्वर डिस्क | फ़ाइलें ऐप सर्वर के फ़ाइल सिस्टम पर लिखी जाती हैं | सिर्फ़ लोकल डेवलपमेंट | अक्सर रीस्टार्ट या रीडिप्लॉय पर मिट जाती हैं |
| डेटाबेस के अंदर | फ़ाइल के बाइट एक टेबल में | लगभग कभी नहीं | डेटाबेस फूल जाता है, बैकअप धीमे होते हैं |
| थर्ड-पार्टी अपलोड विजेट | एक होस्टेड अपलोडर पूरा फ़्लो संभालता है | भारी मीडिया, इमेज ट्रांसफ़ॉर्म | एक और विक्रेता, अकाउंट और बिल |
ज़्यादातर ऐप के लिए ऑब्जेक्ट स्टोरेज और डेटाबेस रिकॉर्ड सही जवाब है। डेटाबेस की रो वह है जिसे आपकी ऐप क्वेरी करती है ("इस यूज़र के दस्तावेज़ दिखाओ"); bucket सिर्फ़ बाइट रखता है।
सार्वजनिक बनाम निजी फ़ाइलें
- सार्वजनिक फ़ाइलें (प्रोडक्ट फ़ोटो, ब्लॉग इमेज, अवतार) सार्वजनिक URL से दी जा सकती हैं। लिंक वाला कोई भी उन्हें खोल सकता है, और इस तरह के कंटेंट के लिए यह ठीक है।
- निजी फ़ाइलों (इनवॉइस, कॉन्ट्रैक्ट, मेडिकल या ID दस्तावेज़, क्लाइंट डिलिवरेबल) का कोई अनुमान लगाया जा सकने वाला सार्वजनिक URL कभी नहीं होना चाहिए। सर्वर जाँचता है कि लॉग इन यूज़र फ़ाइल का मालिक है या अनुमति रखता है, फिर या तो उसे स्ट्रीम करता है या एक साइन्ड URL लौटाता है: ऐसा लिंक जो सिर्फ़ थोड़े समय के लिए काम करता है।
एक आम और गंभीर बग यह है कि निजी फ़ाइलें अनुमान लगाए जा सकने वाले नामों के साथ सार्वजनिक bucket में रखी जाती हैं। जो कोई /uploads/invoice-102.pdf अंदाज़ा लगा ले, उसे किसी और का इनवॉइस मिल जाता है।
उदाहरण प्रॉम्प्ट
सार्वजनिक इमेज अपलोड:
एडमिन हर प्रोडक्ट के लिए अधिकतम 5 प्रोडक्ट फ़ोटो अपलोड कर सकें। हर फ़ाइल JPG, PNG और WebP में, 5 MB तक। फ़ाइलें फ़ाइल स्टोरेज में रखो, और हर फ़ाइल की key, आकार और क्रम product_images टेबल में सेव करो, और थंबनेल के साथ हटाने का बटन दिखाओ। प्रकार और आकार सर्वर पर जाँचो, सिर्फ़ ब्राउज़र में नहीं।
निजी दस्तावेज़ अपलोड:
लॉग इन क्लाइंट्स के लिए एक Documents पेज जोड़ो। क्लाइंट 20 MB तक PDF अपलोड कर सकें। फ़ाइलें निजी हैं: उन्हें फ़ाइल स्टोरेज में रखो, और owner ID, मूल फ़ाइल नाम, आकार और अपलोड का समय documents टेबल में सेव करो, और डाउनलोड सिर्फ़ मालिक और एडमिन को दो। डाउनलोड एक सर्वर रूट से हों जो अनुमति जाँचे। इन फ़ाइलों के लिए कभी सार्वजनिक URL न दो।
उपयोगी आगे के प्रॉम्प्ट:
अपलोड के दौरान प्रोग्रेस बार दिखाओ, और अगर फ़ाइल बहुत बड़ी हो या गलत प्रकार की हो तो साफ़ त्रुटि दिखाओ।
जब कोई दस्तावेज़ रो हटाई जाए, तो स्टोर की गई फ़ाइल भी हटा दो।
चरण-दर-चरण
- हर अपलोड फ़ील्ड के लिए प्रकार और आकार की सीमा चुनें। स्पष्ट रहें: "documents" नहीं, "20 MB तक PDF"।
- स्टोरेज चालू करें। AI बिल्डर में अपलोड माँगें, वह स्टोरेज सेट कर देगा; कहीं और bucket बनाएँ और उसके क्रेडेंशियल सर्वर-साइड सीक्रेट के रूप में जोड़ें।
- फ़ाइल रिकॉर्ड के लिए डेटाबेस टेबल बनाएँ: ID, मालिक, स्टोरेज key, मूल नाम, प्रकार, आकार, बनाने का समय।
- सर्वर पर अपलोड रूट बनाएँ: जाँचें कि यूज़र लॉग इन है, प्रकार और आकार जाँचें, एक सुरक्षित स्टोरेज key बनाएँ (यूज़र के फ़ाइल नाम से नहीं), फ़ाइल सेव करें, रिकॉर्ड डालें।
- डाउनलोड या दिखाने का रास्ता बनाएँ: सार्वजनिक फ़ाइलों के लिए सार्वजनिक URL; निजी के लिए अनुमति-जाँच वाला रूट या साइन्ड URL।
- UI बनाएँ: फ़ाइल पिकर, ज़रूरत हो तो ड्रैग और ड्रॉप, प्रोग्रेस, प्रीव्यू, त्रुटियाँ।
- हटाने को संभालें ताकि रिकॉर्ड हटाने पर स्टोर की गई फ़ाइल भी हट जाए।
- टेस्ट करें: अपलोड करें, रीलोड करें, रीडिप्लॉय या पब्लिश करें, और जाँचें कि फ़ाइल अब भी लोड होती है। फिर दूसरे यूज़र से लॉग इन करके पहले यूज़र की निजी फ़ाइल खोलने की कोशिश करें।
आम गलतियाँ
- अपलोड सर्वर की डिस्क पर लिखना। डेवलपमेंट में चलता है, फिर रीस्टार्ट या रीडिप्लॉय के बाद फ़ाइलें गायब हो जाती हैं।
- ब्राउज़र की जाँच पर भरोसा करना। फ़ाइल इनपुट का "accept" सेटिंग सिर्फ़ संकेत है, सुरक्षा नहीं। प्रकार और आकार सर्वर पर जाँचें।
- यूज़र के फ़ाइल नाम को स्टोरेज key बनाना। नाम टकराते हैं और अजीब अक्षर रख सकते हैं। एक अनोखी key बनाएँ और मूल नाम अलग से सेव करें।
- निजी फ़ाइलों के लिए सार्वजनिक bucket। ऊपर देखें; यही वह गलती है जो खबर बनती है।
- हर तरह की फ़ाइल की अनुमति। HTML या SVG फ़ाइलें आपके डोमेन से परोसी जाएँ तो कुछ सेटअप में स्क्रिप्ट चला सकती हैं। सिर्फ़ ज़रूरी प्रकार स्वीकार करें।
- आकार की कोई सीमा नहीं। एक बहुत बड़ा अपलोड आपकी स्टोरेज सीमा खा सकता है या रिक्वेस्ट को टाइमआउट कर सकता है।
- अनाथ फ़ाइलें। डेटाबेस रो हटा दी पर फ़ाइल नहीं, तो वह स्टोरेज धीरे-धीरे भरती है जिसका आप भुगतान कर रहे हैं।
- मोबाइल भूल जाना। फ़ोन की फ़ोटो बड़ी हो सकती हैं और HEIC जैसे फ़ॉर्मेट में होती हैं; तय करें कि उन्हें स्वीकार करें या बदलें।
चेकलिस्ट
- फ़ाइलें ऑब्जेक्ट स्टोरेज में जाती हैं, सर्वर डिस्क या डेटाबेस में नहीं
- हर फ़ाइल का डेटाबेस रिकॉर्ड है, जिसमें मालिक, key, नाम, प्रकार और आकार हो
- प्रकार और आकार सर्वर पर जाँचे जाते हैं
- स्टोरेज key बनाई जाती है, फ़ाइल नाम से नहीं ली जाती
- निजी फ़ाइलें सिर्फ़ अनुमति जाँच के बाद दी जाती हैं
- कोई दूसरा यूज़र आपकी निजी फ़ाइलें नहीं खोल सकता, लिंक होने पर भी
- रिकॉर्ड हटाने पर फ़ाइल भी हटती है
- पब्लिश या रीडिप्लॉय के बाद फ़ाइलें अब भी लोड होती हैं
- अपलोड की त्रुटियाँ साफ़ दिखती हैं, फ़ोन पर भी
Mythex में फ़ाइल अपलोड
जब आपकी ऐप को अपलोड चाहिए हों, Mythex किसी प्रोजेक्ट के लिए फ़ाइल स्टोरेज अपने-आप चालू कर सकता है, ताकि आपको bucket हाथ से न बनाना पड़े। आप चैट में /storage भी टाइप कर सकते हैं। यह Free और Pro दोनों पर उपलब्ध है, Free पर 1 GB की सीमा के साथ, और इसकी स्थिति Settings → Storage में देखी जा सकती है।
डॉक्स साफ़ कहते हैं कि पब्लिश्ड होस्टिंग स्थायी लोकल फ़ाइल सिस्टम नहीं है, इसलिए एजेंट से डिस्क पर सेव करने के बजाय प्लेटफ़ॉर्म स्टोरेज इस्तेमाल करने को कहें। स्टोर की गई फ़ाइलों और डाउनलोड का खर्च आपके क्रेडिट बैलेंस से कटता है, आकार और डाउनलोड की मात्रा के हिसाब से; Pro पर यह Free दर का आधा है। डॉक्स में फ़ाइल स्टोरेज देखें।
अपलोड अक्सर फ़ाइल रिकॉर्ड के लिए डेटाबेस और निजी फ़ाइलों के लिए लॉगिन के साथ चलते हैं। अगर आप ऐसी जगह बना रहे हैं जहाँ क्लाइंट दस्तावेज़ों का आदान-प्रदान करें, तो क्लाइंट पोर्टल कैसे बनाएँ देखें, और लॉन्च से पहले सुरक्षा चेकलिस्ट से गुज़रें।
सवाल
अपलोड की गई फ़ाइलें कहाँ स्टोर होनी चाहिए?
ऑब्जेक्ट स्टोरेज में (फ़ाइलों के लिए बनी सेवा, जिसे अक्सर bucket कहा जाता है), न कि ऐप सर्वर की डिस्क पर और न डेटाबेस के अंदर। अपने डेटाबेस में सिर्फ़ फ़ाइल की key या URL स्टोर करें, साथ में नाम, आकार और मालिक जैसे विवरण।
पब्लिश या रीडिप्लॉय करने के बाद मेरी अपलोड की गई फ़ाइलें क्यों गायब हो जाती हैं?
ज़्यादातर होस्टिंग प्लेटफ़ॉर्म स्थायी लोकल डिस्क नहीं रखते: ऐप रीस्टार्ट या रीडिप्लॉय होने पर उसकी डिस्क पर लिखी फ़ाइलें खो जाती हैं। अपलोड ऑब्जेक्ट स्टोरेज में सेव करें।
अपलोड की गई फ़ाइलों को निजी कैसे रखूँ?
फ़ाइलों को सार्वजनिक रूप से पढ़ने योग्य न बनाएँ। आपका सर्वर जाँचे कि लॉग इन यूज़र को फ़ाइल देखने की अनुमति है, फिर उसे भेजे या उसका एक अल्पकालिक साइन्ड लिंक लौटाए।
क्या Mythex फ़ाइल अपलोड सपोर्ट करता है?
हाँ। जब ऐप को अपलोड चाहिए हों, Mythex किसी प्रोजेक्ट के लिए फ़ाइल स्टोरेज चालू कर सकता है, Free और Pro दोनों पर, Free पर 1 GB की सीमा के साथ। आप एजेंट से अपलोड फ़ीचर माँगें या /storage टाइप करें।