আপনার অ্যাপে ফাইল আপলোড কীভাবে যুক্ত করবেন: স্টোরেজ, সীমা ও নিরাপত্তা
আপনার অ্যাপে ফাইল আপলোড যুক্ত করতে ফাইলগুলো অবজেক্ট স্টোরেজে (একটি bucket) রাখুন, সার্ভারের ডিস্কে বা ডাটাবেসে নয়, এবং ডাটাবেসে একটি ছোট রেকর্ড রাখুন — ফাইলের key, নাম, আকার, ধরন ও মালিকসহ। সার্ভারে ফাইলের আকার ও ধরন যাচাই করুন, আগে থেকে ঠিক করুন ফাইলগুলো প্রকাশ্য (যেমন পণ্যের ছবি) না ব্যক্তিগত (যেমন ইনভয়েস), এবং ব্যক্তিগত ফাইল শুধু যে চাইছে তাকে যাচাই করার পরেই দিন। AI অ্যাপ বিল্ডারে এক প্রম্পটেই আপলোড ফিচার বর্ণনা করা যায়; গুরুত্বপূর্ণ অংশ হলো পরীক্ষা করা যে রিডিপ্লয়ের পরেও ফাইল টিকে থাকে এবং ভুল ব্যক্তি সেগুলো খুলতে পারে না।
কী ধরনের আপলোড দরকার তা ঠিক করুন
বানানোর আগে তিনটি প্রশ্নের উত্তর দিন:
- কোন ফাইল? প্রোফাইল ছবি, পণ্যের ছবি, PDF, স্প্রেডশিট, অডিও, ভিডিও। এটি ধরন ও আকারের সীমা ঠিক করে।
- কে দেখতে পাবে? সবাই (একটি পাবলিক গ্যালারি) না শুধু আপলোডকারী ও অ্যাডমিন (চুক্তি, পরিচয়পত্র, ক্লায়েন্টের ফাইল)।
- আপলোডের পরে কী হবে? শুধু সেভ, একটি প্রিভিউ দেখানো, ছবির আকার বদল, নাকি ভেতরের বিষয়বস্তু পড়া।
পাবলিক ছবি ও ব্যক্তিগত ডকুমেন্টের সেটআপ আলাদা, তাই এটি আগে ঠিক করুন।
ফাইল কোথায় থাকা উচিত
| অপশন | কীভাবে কাজ করে | কীসের জন্য ভালো | যা খেয়াল রাখবেন |
|---|---|---|---|
| অবজেক্ট স্টোরেজ (bucket) | ফাইল এমন সার্ভিসে থাকে যা এর জন্য তৈরি; ডাটাবেসে একটি key বা URL থাকে | প্রায় প্রতিটি অ্যাপ | অ্যাক্সেস নিয়ম সঠিকভাবে সেট করতে হবে |
| প্ল্যাটফর্মের দেওয়া স্টোরেজ | আপনার অ্যাপ বিল্ডার বা হোস্ট আপনার জন্য একটি bucket চালু করে | সেই প্ল্যাটফর্মে বানানো অ্যাপ | সীমা ও দাম প্ল্যাটফর্ম অনুযায়ী |
| সার্ভার ডিস্ক | অ্যাপ সার্ভারের ফাইল সিস্টেমে ফাইল লেখা | শুধু লোকাল ডেভেলপমেন্ট | রিস্টার্ট বা রিডিপ্লয়ে প্রায়ই মুছে যায় |
| ডাটাবেসের ভেতরে | ফাইলের বাইট একটি টেবিলে | প্রায় কখনোই না | ডাটাবেস ফুলিয়ে দেয়, ব্যাকআপ ধীর করে |
| তৃতীয়-পক্ষের আপলোড উইজেট | একটি হোস্টেড আপলোডার পুরো প্রক্রিয়া সামলায় | ভারী মিডিয়া, ছবি রূপান্তর | আরেকটি ভেন্ডর, অ্যাকাউন্ট ও বিল |
বেশিরভাগ অ্যাপের জন্য অবজেক্ট স্টোরেজ ও একটি ডাটাবেস রেকর্ড সঠিক উত্তর। ডাটাবেসের সারিই আপনার অ্যাপ কোয়েরি করে ("এই ব্যবহারকারীর ডকুমেন্ট দেখাও"); bucket শুধু বাইটগুলো ধরে রাখে।
পাবলিক বনাম ব্যক্তিগত ফাইল
- পাবলিক ফাইল (পণ্যের ছবি, ব্লগের ছবি, অবতার) একটি পাবলিক URL থেকে দেওয়া যায়। লিংক থাকলে যে কেউ খুলতে পারে, এ ধরনের কন্টেন্টে এটি ঠিক আছে।
- ব্যক্তিগত ফাইল (ইনভয়েস, চুক্তি, মেডিক্যাল বা পরিচয়পত্র নথি, ক্লায়েন্টের ডেলিভারেবল) কখনো আন্দাজ করা যায় এমন পাবলিক URL পাবে না। সার্ভার যাচাই করে লগইন করা ব্যবহারকারী ফাইলের মালিক বা অনুমতিপ্রাপ্ত কিনা, তারপর হয় ফাইলটি স্ট্রিম করে ফেরত দেয়, নয়তো একটি সাইনড URL দেয়: এমন একটি লিংক যা শুধু অল্প সময়ের জন্য কাজ করে।
একটি সাধারণ ও গুরুতর বাগ হলো ব্যক্তিগত ফাইল পূর্বানুমেয় নামসহ একটি পাবলিক bucket-এ রাখা। যে কেউ /uploads/invoice-102.pdf আন্দাজ করলে অন্য কারও ইনভয়েস পেয়ে যায়।
উদাহরণ প্রম্পট
একটি পাবলিক ছবি আপলোড:
অ্যাডমিনরা প্রতি পণ্যে সর্বোচ্চ ৫টি পণ্যের ছবি আপলোড করতে পারবে। JPG, PNG ও WebP গ্রহণ করো, প্রতিটি সর্বোচ্চ ৫ MB। ফাইলগুলো ফাইল স্টোরেজে রাখো, প্রতিটি ফাইলের key, আকার ও ক্রম একটি product_images টেবিলে সেভ করো, এবং একটি রিমুভ বাটনসহ থাম্বনেইল দেখাও। ধরন ও আকার শুধু ব্রাউজারে নয়, সার্ভারে যাচাই করো।
একটি ব্যক্তিগত ডকুমেন্ট আপলোড:
লগইন করা ক্লায়েন্টদের জন্য একটি Documents পেজ যোগ করো। ক্লায়েন্টরা সর্বোচ্চ ২০ MB-র PDF আপলোড করতে পারবে। ফাইলগুলো ব্যক্তিগত: ফাইল স্টোরেজে রাখো, এবং একটি documents টেবিলে মালিকের ID, মূল ফাইলের নাম, আকার ও আপলোডের সময় সেভ করো। শুধু মালিক ও অ্যাডমিন ডাউনলোড করতে পারবে। ডাউনলোড সার্ভার রুটের মাধ্যমে যাবে যা অনুমতি যাচাই করে। এই ফাইলগুলোর জন্য কখনো পাবলিক URL দিয়ো না।
কার্যকর পরবর্তী ধাপ:
আপলোডের সময় একটি প্রগ্রেস বার দেখাও, এবং ফাইল খুব বড় বা ভুল ধরনের হলে একটি স্পষ্ট ত্রুটি বার্তা দাও।
একটি ডকুমেন্ট রো মুছে দিলে সংরক্ষিত ফাইলটিও মুছে দাও।
ধাপে ধাপে
- প্রতিটি আপলোড ফিল্ডের জন্য ধরন ও আকারের সীমা ঠিক করুন। নির্দিষ্ট হোন: "documents" নয়, "২০ MB পর্যন্ত PDF"।
- স্টোরেজ চালু করুন। AI বিল্ডারে আপলোড চাইলেই সে স্টোরেজ সেটআপ করবে; অন্যত্র একটি bucket বানিয়ে তার তথ্য সার্ভার-সাইড সিক্রেট হিসেবে যোগ করুন।
- ফাইল রেকর্ডের জন্য একটি ডাটাবেস টেবিল বানান: ID, মালিক, স্টোরেজ key, মূল নাম, ধরন, আকার, তৈরির সময়।
- সার্ভারে আপলোড রুট বানান: ব্যবহারকারী লগইন করা কিনা দেখুন, ধরন ও আকার যাচাই করুন, নিরাপদ একটি স্টোরেজ key তৈরি করুন (ব্যবহারকারীর ফাইলনাম নয়), ফাইল সেভ করুন, রেকর্ড ঢোকান।
- ডাউনলোড বা প্রদর্শনের পথ বানান: পাবলিক ফাইলের জন্য পাবলিক URL; ব্যক্তিগত ফাইলের জন্য অনুমতি-যাচাইকৃত রুট বা সাইনড URL।
- UI বানান: ফাইল পিকার, দরকারে ড্র্যাগ অ্যান্ড ড্রপ, প্রগ্রেস, প্রিভিউ, ত্রুটি।
- মোছা হ্যান্ডল করুন, যাতে রেকর্ড মুছলে সংরক্ষিত ফাইলও মোছে।
- পরীক্ষা করুন: আপলোড করুন, রিলোড করুন, রিডিপ্লয় বা প্রকাশ করুন, এবং দেখুন ফাইলটি এখনও লোড হয় কিনা। তারপর অন্য একজন ব্যবহারকারী হিসেবে লগইন করে প্রথম ব্যবহারকারীর ব্যক্তিগত ফাইল খুলতে চেষ্টা করুন।
সাধারণ ভুল
- সার্ভারের ডিস্কে আপলোড লেখা। ডেভেলপমেন্টে কাজ করে, তারপর রিস্টার্ট বা রিডিপ্লয়ের পরে ফাইল উধাও হয়।
- ব্রাউজারের যাচাইয়ে ভরসা করা। ফাইল ইনপুটের "accept" সেটিং একটি ইঙ্গিত, নিরাপত্তা নয়। ধরন ও আকার সার্ভারে যাচাই করুন।
- ব্যবহারকারীর ফাইলনামকে storage key হিসেবে ব্যবহার। নাম সংঘর্ষ করে এবং অদ্ভুত অক্ষর থাকতে পারে। একটি অনন্য key তৈরি করুন এবং মূল নাম আলাদাভাবে সেভ করুন।
- ব্যক্তিগত ফাইলের জন্য পাবলিক bucket। উপরে বলা হয়েছে; এটিই সবচেয়ে বেশি খবরে আসে।
- যেকোনো ফাইল ধরনের অনুমতি। HTML বা SVG ফাইল আপনার ডোমেইন থেকে সার্ভ হলে কিছু সেটআপে স্ক্রিপ্ট চালাতে পারে। শুধু যা দরকার সেই ধরনগুলো গ্রহণ করুন।
- কোনো আকারের সীমা না থাকা। একটি বিশাল আপলোড স্টোরেজ বরাদ্দ খেয়ে ফেলতে বা অনুরোধ টাইমআউট করাতে পারে।
- এতিম ফাইল। ডাটাবেস রেকর্ড মুছে ফাইল না মোছা ধীরে ধীরে এমন স্টোরেজ ভরিয়ে তোলে যার টাকা আপনি দিচ্ছেন।
- মোবাইল ভুলে যাওয়া। ফোনের ছবি বড় হতে পারে এবং HEIC-এর মতো ফরম্যাটে থাকে; গ্রহণ করবেন না রূপান্তর করবেন তা ঠিক করুন।
চেকলিস্ট
- ফাইল যায় অবজেক্ট স্টোরেজে, সার্ভার ডিস্কে বা ডাটাবেসে নয়
- প্রতিটি ফাইলের একটি ডাটাবেস রেকর্ড আছে: মালিক, key, নাম, ধরন ও আকারসহ
- ধরন ও আকার সার্ভারে যাচাই হয়
- স্টোরেজ key তৈরি করা হয়, ফাইলনাম থেকে নেওয়া হয় না
- ব্যক্তিগত ফাইল শুধু অনুমতি যাচাইয়ের পরে দেওয়া হয়
- অন্য ব্যবহারকারী লিংক থাকলেও আপনার ব্যক্তিগত ফাইল খুলতে পারে না
- রেকর্ড মুছলে ফাইলও মোছে
- প্রকাশ বা রিডিপ্লয়ের পরেও ফাইল লোড হয়
- আপলোডের ত্রুটি স্পষ্টভাবে দেখানো হয়, ফোনেও
Mythex-এ ফাইল আপলোড
আপনার অ্যাপের আপলোড দরকার হলে Mythex একটি প্রজেক্টের জন্য ফাইল স্টোরেজ স্বয়ংক্রিয়ভাবে চালু করতে পারে, তাই bucket হাতে সেটআপ করতে হয় না। চ্যাটে /storage টাইপও করতে পারেন। এটি Free ও Pro-তে পাওয়া যায়, Free-তে ১ GB সীমা সহ, এবং এর অবস্থা দেখা যায় Settings → Storage-এ।
ডকসে স্পষ্ট বলা আছে যে প্রকাশিত হোস্টিং স্থায়ী লোকাল ফাইল সিস্টেম নয়, তাই ডিস্কে সেভ না করে প্ল্যাটফর্ম স্টোরেজ ব্যবহার করতে এজেন্টকে বলুন। সংরক্ষিত ফাইল ও ডাউনলোডের খরচ আপনার ক্রেডিট ব্যালেন্স থেকে কাটা হয়, আকার ও কতটা ডাউনলোড হয় তার ভিত্তিতে; Pro প্ল্যানে Free-র অর্ধেক রেট। ডকসে দেখুন ফাইল স্টোরেজ।
আপলোড প্রায়ই একটি ডাটাবেসের সাথে যায় ফাইল রেকর্ডের জন্য, এবং ব্যক্তিগত ফাইলের জন্য লগইন-এর সাথে। যদি ক্লায়েন্টরা ডকুমেন্ট বিনিময়ের একটি জায়গা বানান, দেখুন কীভাবে একটি ক্লায়েন্ট পোর্টাল বানাবেন, এবং লঞ্চের আগে নিরাপত্তা চেকলিস্ট দেখে নিন।
প্রশ্নোত্তর
আপলোড করা ফাইল কোথায় রাখা উচিত?
অবজেক্ট স্টোরেজে (ফাইলের জন্য তৈরি একটি সার্ভিস, যাকে প্রায়ই bucket বলা হয়), অ্যাপ সার্ভারের ডিস্কে বা ডাটাবেসের ভেতরে নয়। ডাটাবেসে শুধু ফাইলের key বা URL রাখুন, সঙ্গে নাম, আকার ও মালিকের মতো তথ্য।
প্রকাশ বা রিডিপ্লয়ের পরে আমার আপলোড করা ফাইল কেন হারিয়ে যায়?
বেশিরভাগ হোস্টিং প্ল্যাটফর্মে স্থায়ী লোকাল ডিস্ক থাকে না: অ্যাপ রিস্টার্ট বা রিডিপ্লয় হলে তার ডিস্কে লেখা ফাইল হারিয়ে যায়। আপলোড বরং অবজেক্ট স্টোরেজে সেভ করুন।
আপলোড করা ফাইল কীভাবে ব্যক্তিগত রাখব?
ফাইলগুলো প্রকাশ্যভাবে পড়ার যোগ্য করবেন না। আপনার সার্ভার যাচাই করুক লগইন করা ব্যবহারকারী ফাইলটি দেখার অনুমতি পান কিনা, তারপর ফাইলটি পাঠান অথবা একটি স্বল্পমেয়াদি সাইনড লিংক ফেরত দিন।
Mythex কি ফাইল আপলোড সমর্থন করে?
হ্যাঁ। অ্যাপের আপলোড দরকার হলে Mythex একটি প্রজেক্টের জন্য ফাইল স্টোরেজ চালু করতে পারে; এটি Free ও Pro প্ল্যানে পাওয়া যায়, Free-তে ১ GB সীমা সহ। আপলোড ফিচারের জন্য এজেন্টকে বলুন অথবা /storage টাইপ করুন।