আপনার AI-তৈরি অ্যাপে মানুষকে ছবি আপলোড করতে দেওয়া (অ্যাপ ভেঙে না পড়ে)

AI-তৈরি অ্যাপে ফটো আপলোড যোগ করার মানে হলো ফাইলগুলো ডাটাবেসে নয়, নির্দিষ্ট ফাইল স্টোরেজে রাখা, ১০ MB-এর মতো একটা সাইজ ও ফাইল-টাইপ সীমা বেঁধে দেওয়া, আর ছোট একটা প্রিভিউ থাম্বনেইল তৈরি করা — এগুলোই আপনার বিল্ডারকে দেওয়ার মূল নির্দেশনা।

যে মুহূর্তে আপনার অ্যাপ শুধু টেক্সট থাকা বন্ধ করে মানুষকে ছবি আপলোড করতে দেওয়া শুরু করে, তখন কিছু একটা বদলে যায়। ইমেজ আর ফাইল আপলোড যোগ করা মানে ব্যবহারকারীকে তার ডিভাইস থেকে একটা ছবি, রসিদ বা ডকুমেন্ট আপনার অ্যাপে পাঠাতে দেওয়া, যেটা অ্যাপ সংরক্ষণ করে রাখে আর পরে দেখায় — একটা প্রোফাইল ছবি, একটা রসিদ, ক্ষতিগ্রস্ত প্যাকেজের একটা স্ন্যাপশট, একটা PDF চুক্তি। এটা সেই ফিচারগুলোর একটা, যেটা দেখতে একটামাত্র চেকবক্সের মতো মনে হয়, কিন্তু ভেতরে কয়েকটা ধারালো কোণ লুকিয়ে থাকে। কোনোটাই কঠিন না। কিন্তু যেগুলো নিয়ে কেউ আগে থেকে সতর্ক করে না, সেগুলোই লঞ্চের তিন সপ্তাহ পর হঠাৎ সামনে চলে আসে — সাধারণত আপনার সবচেয়ে উৎসাহী ব্যবহারকারীর কাছ থেকে।

এই লেখাটা একটা ঘুরে দেখা — কেউ “আপলোড” চাপলে আসলে কী ঘটে, পরে যে তিনটা ভুল কামড় দেয়, আর ঠিক কী কী জিনিস আপনার বিল্ডারকে চাইতে হবে যাতে সেগুলোর মুখোমুখি না হতে হয়।

আপনি যখন একটা অ্যাপে ছবি আপলোড করেন, তখন আসলে কী ঘটে?

ছবি আপলোড করলে ধারাবাহিকভাবে চারটা ধাপ ঘটে: আপনার ফোন ফাইলটা অ্যাপের হাতে তুলে দেয়, অ্যাপ সেটা আলাদা ফাইল স্টোরেজে পাঠায় (ডাটাবেসে নয়), অ্যাপ সেই ফাইলের একটা লিংক রেকর্ডের পাশে সংরক্ষণ করে, আর পরে যখনই কেউ সেই রেকর্ড দেখে, অ্যাপ সেই লিংক ব্যবহার করে ফাইলটা নিয়ে আসে।

ধাপে ধাপে দেখলে এটা এমন দেখতে:

১. ফোন আপনার অ্যাপের হাতে ফাইলটা তুলে দেয়। একটা আধুনিক ফোনের ছবি প্রায়ই ৪ থেকে ১২ মেগাবাইট হয়। এটা কম কথা না। ২. আপনার অ্যাপ সেই ফাইলটা কোথাও পাঠায় সংরক্ষণের জন্য — আপনার অ্যাপের ডাটাবেসে নয়, বরং ফাইলের জন্য তৈরি একটা আলাদা স্টোরেজ বাকেটে। ৩. আপনার অ্যাপ সেই ফাইলের একটা লিংক ডাটাবেসে সংরক্ষণ করে, রেকর্ডের বাকি অংশের পাশেই (এই রসিদটা এই খরচের সঙ্গে যুক্ত)। ৪. পরে, যখন কেউ রেকর্ডটা দেখে, অ্যাপ সেই লিংক ব্যবহার করে স্টোরেজ থেকে ফাইলটা নিয়ে এসে দেখায়।

যে অংশটায় মানুষ ভুল করে সেটা হলো ধাপ ২ আর ৩। তারা কল্পনা করে যে ছবিটা “অ্যাপে সংরক্ষিত” হয়ে গেছে। হয় না, আর হওয়াও উচিত না। ফাইল থাকে স্টোরেজে; আপনার ডাটাবেস শুধু মনে রাখে কোথায় আছে। এই বিভাজনটা ঠিকমতো করলে পরের সবকিছু সহজ হয়ে যায়।

আপলোড করা ছবি কি সরাসরি ডাটাবেসে সংরক্ষণ করা উচিত?

না — আর এটাই সবচেয়ে সাধারণ আপলোড-ভুল, যা AI বিল্ডাররা মাঝেমধ্যে ডিফল্ট হিসেবে করে ফেলে যদি আপনি স্পষ্ট নির্দেশ না দেন। একটা ১০ MB ছবি সরাসরি ডাটাবেসে ঢুকিয়ে দেওয়া অনেকটা আপনার আসবাবপত্র মানিব্যাগে রাখার মতো। ডাটাবেস তৈরি হয়েছে ছোট, গোছানো জিনিসের জন্য — নাম, তারিখ, দাম। এতে ছবি ঢালুন, দেখবেন সব ধীর হয়ে যাচ্ছে, ব্যাকআপ বেলুনের মতো ফুলে উঠছে, আর একদিন যে পেজটা আগে চোখের পলকে লোড হতো, সেটাই ছয় সেকেন্ড সময় নিচ্ছে, কারণ সেটা সাথে করে শ-খানেক পূর্ণ-রেজোলিউশনের ছবি টেনে নিয়ে যাচ্ছে।

আপনি যা চান তার বদলে: ফাইলটা যায় ফাইল স্টোরেজে (আপনার বিল্ডার এটাকে “স্টোরেজ বাকেট” বা “ব্লব স্টোরেজ” বলতে পারে), আর ডাটাবেস শুধু লিংকটা ধরে রাখে। সরাসরি এটাই চেয়ে নিন:

“আপলোড করা ছবিগুলো ডাটাবেসে নয়, ফাইল স্টোরেজে সংরক্ষণ করো। রেকর্ডে শুধু ফাইলের URL রাখো।“

ব্যবহারকারী ভুল ফাইল-টাইপ বা বিশাল বড় ফাইল আপলোড করা কীভাবে ঠাকাবেন?

আগে থেকেই ঠিক করে নিন কী কী অনুমোদিত — ফাইলের ধরন, সাইজ সীমা, আর একটা স্পষ্ট এরর মেসেজ — আর সেটা স্পষ্টভাবে আপনার বিল্ডারকে বলুন, কারণ এই নিয়মগুলো ছাড়া আপনার অ্যাপ যেকোনো কিছুই গ্রহণ করবে, এমনকি এমন ফাইলও যা পুরো আপলোড প্রক্রিয়াটাই আটকে দেবে। দুটো বাস্তব ঘটনা দেখায় কেন এটা জরুরি, দুটোই এমন অ্যাপ থেকে যেগুলো টেস্টিং-এ ভালোই কাজ করছিল:

একজন নারী একটা ছোট ক্যাটারিং ব্যবসা চালান, তিনি একটা অ্যাপ বানিয়েছিলেন যাতে ক্লায়েন্টরা তাদের পছন্দের কেকের ছবি আপলোড করতে পারে। সবকিছু দারুণ চলছিল, যতক্ষণ না এক ক্লায়েন্ট একটা পেশাদার ক্যামেরা থেকে সরাসরি ৪৭ MB-এর একটা ছবি আপলোড করে বসেন। আপলোড আটকে যায়, ক্লায়েন্ট হাল ছেড়ে দেন, আর তিনি এই ঘটনার কথা শোনেন “আপনার অ্যাপ নষ্ট” হিসেবে। এটা নষ্ট ছিল না — শুধু কখনো কোনো সাইজ সীমা বেঁধে দেওয়া হয়নি, তাই এটা বিশাল একটা ফাইল গিলে ফেলার চেষ্টায় চিরকাল বসে ছিল।

আরেকটা ঘটনা: একজন ফ্রিল্যান্সার একটা ক্লায়েন্ট পোর্টাল বানিয়েছিলেন, যেখানে মানুষ “নিজেদের লোগো” আপলোড করবে। একজন ক্লায়েন্ট একটা .zip ফাইল আপলোড করেন। আরেকজন একটা ৯০ পাতার PDF আপলোড করেন। অ্যাপ সবকিছুই গ্রহণ করে নেয়, কারণ কাউকে কখনো বলা হয়নি লোগো বলতে আসলে কী বোঝানো উচিত।

আগে থেকেই এই তিনটা জিনিস ঠিক করুন:

  • কোন ফাইল-টাইপ? শুধু ছবি? তাহলে JPG আর PNG গ্রহণ করুন, বাকিগুলো একটা বন্ধুসুলভ মেসেজসহ প্রত্যাখ্যান করুন।
  • কত বড়? একটা যুক্তিসঙ্গত ছবি-সীমা প্রায় ৫ থেকে ১০ MB। যথেষ্ট বড় একটা আসল ফোনের ছবির জন্য, আবার যথেষ্ট ছোট একটা ক্যামেরা-ডাম্প আটকানোর জন্য।
  • ভুল হলে কী হবে? অ্যাপের এটা নম্রভাবে বলা উচিত — “অনুগ্রহ করে ১০ MB-এর নিচে একটা JPG বা PNG আপলোড করুন” — শুধু জমে যাওয়া না।

আপনার বিল্ডারকে বলুন:

“শুধু JPG আর PNG ছবি অনুমতি দাও, সর্বোচ্চ ১০ MB পর্যন্ত। কেউ যদি অন্য কিছু বা এর বেশি বড় কিছু আপলোড করে, নিঃশব্দে ফেল না করে একটা স্পষ্ট মেসেজ দেখাও।“

অনেক ছবি থাকলে আপনার অ্যাপ কেন ধীর মনে হয়?

কারণ প্রতিবার প্রতিটা দর্শক ছোট করা কোনো কপি নয়, পুরো আকারের মূল ফাইলটাই ডাউনলোড করছে — তাদের ফোনে, তাদের ডেটা প্ল্যানে, প্রতিবার যখনই কেউ রেকর্ডটা খোলে। ধরুন কেউ একটা ঝকঝকে ৮ MB ছবি আপলোড করল, আর সেটা একা একা ঠিকই কাজ করে। এটাকে বিশটা ছবির একটা গ্যালারি দিয়ে গুণ করুন, আর আপনার ঝরঝরে দ্রুত অ্যাপটাই কাদার মধ্যে হাঁটার মতো লাগবে।

এর সমাধানের একটা নাম আছে, যেটা জেনে রাখা কাজে লাগবে কারণ আপনার বিল্ডার সেটা চিনবে: একটা থাম্বনেইল, বা ছোট করা একটা সংস্করণ। ধারণাটা হলো, আপনি মূল ফাইলটা রেখে দেবেন, কিন্তু সেইসঙ্গে একটা ছোট, ওয়েব-বান্ধব কপিও বানাবেন, আর লিস্ট ও প্রিভিউতে সেই ছোট কপিটাই দেখাবেন। পুরো ছবিটা তখনই লোড হবে যখন কেউ সত্যিই সেটা বড় করে দেখতে চাইবে।

“একটা ছবি আপলোড হলে, প্রিভিউ আর লিস্টের জন্য একটা ছোট করা সংস্করণও তৈরি করো। ডিফল্ট হিসেবে ছোট সংস্করণটা দেখাও, আর পুরো ছবিটা তখনই লোড করো যখন কেউ ক্লিক করে সেটা দেখতে চাইবে।”

এটা কীভাবে করা হয় তা বোঝার দরকার নেই। শুধু জানতে হবে যে এটা আছে, যাতে আপনার অ্যাপ ধীর হয়ে যাওয়ার পরে নয়, তার আগেই আপনি এটা চেয়ে নিতে পারেন।

কিছু শান্ত কিন্তু গুরুত্বপূর্ণ সিদ্ধান্ত

এই তিনটা সিদ্ধান্ত এড়িয়ে গেলে আপনার অ্যাপ ভেঙে পড়বে না, কিন্তু এখনই ঠিক করে নেওয়া পরে ফিরে গিয়ে ঠিক করার চেয়ে অনেক সস্তা: কে ফাইলটা দেখতে পারবে, রেকর্ড মুছে ফেললে ফাইলটার কী হবে, আর ফোনে আপলোড কাজ করে কি না।

  • কে ফাইলটা দেখতে পারবে? একটা প্রোফাইল ছবি যেকেউ দেখলে সমস্যা নেই। একটা স্ক্যান করা আইডি বা সই করা চুক্তির ক্ষেত্রে তা নয়। ফাইলটা যদি ব্যক্তিগত হয়, আপনার বিল্ডারকে বলুন লিংকটার জন্য লগইন দরকার হওয়া উচিত, যেকেউ খুলতে পারে এমন পাবলিক URL নয়। সংবেদনশীল যেকোনো কিছুর জন্য এটাই আমি সবচেয়ে জোর দিয়ে বলব।
  • রেকর্ড মুছে ফেললে কী হয়? কেউ যদি একটা খরচ মুছে ফেলে, রসিদের ছবিটাও কি পরিষ্কার হয়ে যাওয়া উচিত? না হলে আপনি ধীরে ধীরে জমে থাকা এমন ফাইল জমাতে থাকবেন, যেগুলোর জন্য আপনি টাকা দিচ্ছেন সংরক্ষণের, অথচ ভুলে গেছেন সেগুলোর কথা।
  • এটা ফোনে কাজ করে? বেশিরভাগ আপলোড ফোনেই হয়, আর ফোন দুটো অপশন দেয় — “এখনই একটা ছবি তোলো” এবং “লাইব্রেরি থেকে বেছে নাও”। দুটোই একটা আসল ফোনে টেস্ট করুন, শুধু ল্যাপটপে না, যেখানে আপনি শুধু ফাইল টেনে নিয়ে ছেড়ে দেন।

একজন অপরিচিত মানুষের মতো পরীক্ষা করুন

একটা আসল ব্যবহারকারী যেভাবে ভুলবশত ভেঙে ফেলতে পারে, ঠিক সেভাবে ইচ্ছাকৃতভাবে ভাঙার চেষ্টা করে এটা টেস্ট করুন — একটা সাধারণ ছবি, বিশাল আকারের একটা ফাইল, ভুল ফাইল-টাইপ, সরাসরি ফোন-ক্যামেরা থেকে আপলোড, আর একটা মুছে ফেলা — এটাকে “সম্পন্ন” বলার আগে:

  • একটা সাধারণ ফোনের ছবি আপলোড করুন। এটা কি দেখা যাচ্ছে, আর প্রিভিউটা কি দ্রুত?
  • বিশাল কিছু আপলোড করুন। অ্যাপ কি একটা স্পষ্ট মেসেজ দিয়ে আপনাকে থামায়, নাকি শুধু জমে যায়?
  • ভুল ধরনের ফাইল আপলোড করুন — যেখানে ছবি চাওয়া হয়েছে, সেখানে একটা PDF। এটা কি নিয়মটা ব্যাখ্যা করে?
  • আপনার ফোনে অ্যাপটা খুলে সরাসরি ক্যামেরা থেকে আপলোড করুন।
  • একটা রেকর্ড মুছে দেখুন, ফাইলটা আপনার সিদ্ধান্ত অনুযায়ী সামলানো হচ্ছে কি না।

এই পাঁচটাই যদি ঠিকঠাক কাজ করে, তাহলে বেশিরভাগ মানুষকে যেসব ধারালো কোণ কামড়ায়, সেগুলো আপনি পার হয়ে গেছেন।

আপলোড হলো সেই ফিচারগুলোর একটা, যেখানে “ডেমোতে কাজ করে” আর “ট্রেনে বসে থাকা একজন অপরিচিত মানুষের ১২ MB বিড়ালের ছবির জন্যও কাজ করে” — এই দুইয়ের মধ্যে ফারাকটা ঠিক ওপরের সিদ্ধান্তগুলোর সমষ্টি। এগুলোর কোনোটাই কঠিন না। শুধু এড়িয়ে যাওয়া সহজ — আর এখনই চেয়ে নেওয়াটা পরে মেরামত করার চেয়ে অনেক সহজ।

আপলোড যোগ করাটা যদি এতদিন এড়িয়ে গিয়ে থাকেন এই ভেবে যে এটা একটা বড় টেকনিক্যাল লাফ, তাহলে জেনে রাখুন — তা নয়। আপনার বিল্ডার খুলুন, একটা সাইজ সীমা আর থাম্বনেইলসহ ইমেজ স্টোরেজ চান, আর দেখুন কী দেয়। তারপর গিয়ে আপনার ফোনে এটা ভাঙার চেষ্টা করুন — সেটাই আসল পরীক্ষা, আর এতে পাঁচ মিনিটও লাগে না।