السماح للمستخدمين برفع الصور إلى تطبيقك المبني بالذكاء الاصطناعي (دون أن ينهار)
إضافة رفع الصور إلى تطبيق مبني بالذكاء الاصطناعي تعني تخزين الملفات في مساحة تخزين ملفات مخصصة (وليس في قاعدة البيانات)، وتحديد حد لحجم الملف ونوعه مثل 10 ميغابايت، وإنشاء صورة مصغّرة للمعاينة — هذه هي التعليمات الأساسية التي يجب أن تعطيها لأداة البناء لديك.
في اللحظة التي يتوقف فيها تطبيقك عن كونه مجرد نصوص، ويبدأ بالسماح للناس برفع صورة، يتغيّر شيء ما. إضافة ميزة رفع الصور والملفات تعني السماح للمستخدم بإرسال صورة أو إيصال أو مستند من جهازه إلى تطبيقك، ليقوم التطبيق بتخزينه وعرضه لاحقًا — صورة شخصية، إيصال، لقطة لطرد تالف، أو عقد بصيغة PDF. إنها من تلك الميزات التي تبدو كخانة اختيار واحدة، لكن يتضح أن تحتها بعض الحواف الحادة. لا شيء من هذا صعب. لكن الأشياء التي لا يحذّرك منها أحد هي التي تظهر بعد ثلاثة أسابيع من الإطلاق، وعادةً من أكثر مستخدميك حماسًا.
هذه جولة فيما يحدث فعليًا حين يضغط أحدهم على “رفع”، والأخطاء الثلاثة التي تعود لتؤذيك لاحقًا، والأشياء المحددة التي يجب أن تطلبها من أداة البناء لديك حتى تتجنبها.
ماذا يحدث فعليًا عند رفع صورة إلى تطبيق؟
رفع صورة يُشغّل أربع خطوات بالترتيب: هاتفك يُسلّم الملف للتطبيق، والتطبيق يرسله إلى مساحة تخزين ملفات منفصلة (وليس قاعدة البيانات)، ثم يحفظ التطبيق رابطًا لهذا الملف بجانب السجل، وفي وقت لاحق يجلب الملف باستخدام هذا الرابط كلما شاهد أحدهم السجل.
إليك كيف يبدو ذلك خطوة بخطوة:
- يُسلّم الهاتف الملف لتطبيقك. صورة هاتف حديثة غالبًا ما تكون بين 4 و12 ميغابايت. وهذا ليس بالأمر الهيّن.
- يرسل تطبيقك ذلك الملف إلى مكان ليُخزَّن — ليس في قاعدة بيانات تطبيقك، بل في مساحة تخزين منفصلة مبنية خصيصًا للملفات.
- يحفظ تطبيقك رابطًا لذلك الملف في قاعدة البيانات، بجانب بقية بيانات السجل (هذا الإيصال يخص هذا المصروف).
- لاحقًا، عندما يشاهد أحدهم السجل، يجلب التطبيق الملف من مساحة التخزين باستخدام ذلك الرابط ويعرضه.
الجزء الذي يخطئ فيه الناس هو الخطوتان 2 و3. يتخيلون أن الصورة “تُحفظ في التطبيق”. هذا غير صحيح، ولا ينبغي أن يكون كذلك. الملفات تعيش في مساحة التخزين؛ وقاعدة بياناتك فقط تتذكر مكانها. اضبط هذا الفصل بشكل صحيح وكل ما يليه يصبح أسهل.
هل يجب تخزين الصور المرفوعة مباشرة في قاعدة البيانات؟
لا — وهذا هو الخطأ الأكثر شيوعًا في الرفع، وهو خطأ قد ترتكبه أدوات البناء بالذكاء الاصطناعي افتراضيًا إن لم تكن محددًا بما يكفي. حشر صورة بحجم 10 ميغابايت مباشرة في قاعدة بياناتك أشبه بالاحتفاظ بأثاثك في محفظتك. قاعدة البيانات مصممة للأشياء الصغيرة والمنظمة — الأسماء، التواريخ، الأسعار. اسكب فيها الصور وستصبح بطيئة، وتتضخم النسخ الاحتياطية، ويأتي يوم تصبح فيه صفحة كانت تُحمَّل فورًا تستغرق ست ثوانٍ لأنها تسحب معها مئة صورة بدقة كاملة.
ما تريده بدلًا من ذلك: يذهب الملف إلى مساحة تخزين الملفات (قد تسميها أداة البناء لديك “storage bucket” أو “blob storage”)، وتحتفظ قاعدة البيانات فقط برابط الملف. اطلب ذلك مباشرة:
“خزّن الصور المرفوعة في مساحة تخزين ملفات، وليس في قاعدة البيانات. احتفظ فقط برابط الملف في السجل.”
كيف تمنع المستخدمين من رفع نوع ملف خاطئ أو ملف ضخم؟
أنت تقرر مسبقًا ما هو مسموح — نوع الملف، والحد الأقصى للحجم، ورسالة خطأ واضحة — وتخبر أداة البناء بذلك صراحةً، لأنه بدون هذه القواعد سيقبل تطبيقك أي شيء، بما في ذلك ملفات تُعلّق عملية الرفع بالكامل. سيناريوهان حقيقيان يوضحان السبب، وكلاهما من تطبيقات كانت تعمل جيدًا في الاختبار:
امرأة تدير مشروع تموين صغير وبنت تطبيقًا يرفع فيه العملاء صور الكيك الذي أعجبهم. كان يعمل بشكل رائع حتى رفعت إحدى العميلات صورة بحجم 47 ميغابايت مباشرة من كاميرا احترافية. تعلّق الرفع، واستسلمت العميلة، وسمعت هي عن الأمر على أنه “تطبيقك معطّل”. لم يكن معطّلًا — فقط لم يضع حدًا للحجم من الأساس، فبقي يحاول ابتلاع ملف ضخم إلى الأبد.
مثال ثانٍ: مستقل بنى بوابة عملاء يرفع فيها الناس “شعارهم”. رفع أحد العملاء ملف .zip. ورفع آخر ملف PDF من 90 صفحة. قبِل التطبيق كل ذلك لأن لا أحد أخبره كيف يُفترض أن يبدو الشعار.
قرر هذه الأمور الثلاثة مسبقًا:
- ما أنواع الملفات؟ صور فقط؟ إذن اقبل JPG وPNG وارفض الباقي، مع رسالة ودّية.
- ما الحجم المسموح؟ حد معقول لصورة يتراوح بين 5 و10 ميغابايت. كبير بما يكفي لصورة هاتف حقيقية، وصغير بما يكفي لإيقاف تفريغ كاميرا كاملة.
- ماذا لو كان الملف خاطئًا؟ يجب أن يقول التطبيق ذلك بلطف — “الرجاء رفع صورة JPG أو PNG أقل من 10 ميغابايت” — لا أن يتجمّد فقط.
أخبر أداة البناء لديك:
“اسمح فقط بصور JPG وPNG بحجم أقصى 10 ميغابايت. إذا رفع أحدهم شيئًا آخر أو ملفًا أكبر من ذلك، اعرض رسالة واضحة بدل الفشل الصامت.”
لماذا يبدو تطبيقك بطيئًا عندما يحتوي على الكثير من الصور؟
لأن كل مُشاهد يُحمّل النسخة الأصلية كاملة الحجم في كل مرة، وليس نسخة مصغّرة — على هاتفه، وعلى باقة بياناته، في كل مرة يفتح فيها أحدهم السجل. لنفترض أن أحدهم رفع صورة واضحة بحجم 8 ميغابايت وأنها تعمل جيدًا بمفردها. اضرب ذلك في معرض من عشرين صورة وسيبدو تطبيقك السريع الصغير وكأنك تخوض في الوحل.
الحل له اسم يستحق أن تعرفه لأن أداة البناء ستتعرف عليه: الصورة المصغّرة (thumbnail)، أو نسخة معاد ضبط حجمها. الفكرة أن تحتفظ بالأصل لكنك تصنع أيضًا نسخة صغيرة مناسبة للويب، وتعرض النسخة الصغيرة في القوائم والمعاينات. النسخة الكاملة لا تُحمَّل إلا حين يريد أحدهم فعليًا رؤيتها بحجمها الكبير.
“عند رفع صورة، أنشئ أيضًا نسخة مصغّرة منها للمعاينات والقوائم. اعرض النسخة الصغيرة افتراضيًا، ولا تُحمّل الصورة الكاملة إلا عندما يضغط أحدهم لمشاهدتها.”
لست بحاجة لفهم كيفية تنفيذ ذلك. أنت بحاجة فقط لمعرفة أنه موجود، حتى تطلبه قبل أن يصبح تطبيقك بطيئًا لا بعد ذلك.
بضعة أمور أهدأ تستحق أن تُقرَّر
هذه القرارات الثلاثة لن تكسر تطبيقك إن تجاهلتها، لكنها أرخص لو اتخذتها الآن بدل تعديلها لاحقًا: من يمكنه رؤية الملف، وماذا يحدث له عند حذف السجل، وهل الرفع يعمل على الهاتف.
- من يمكنه رؤية الملف؟ الصورة الشخصية مناسبة لأي شخص لرؤيتها. لكن بطاقة هوية ممسوحة ضوئيًا أو عقد موقّع ليسا كذلك. إذا كان الملف خاصًا، أخبر أداة البناء أن الرابط يجب أن يتطلب تسجيل الدخول، وليس رابطًا عامًا يستطيع أي شخص فتحه. هذا هو الأمر الذي سأشدد عليه أكثر من غيره في أي شيء حساس.
- ماذا يحدث عند حذف السجل؟ إذا حذف أحدهم مصروفًا، فهل يجب أن تُحذف صورة الإيصال أيضًا؟ وإلا فستتراكم لديك تدريجيًا ملفات يتيمة تدفع مقابل تخزينها وتنسى أنها موجودة.
- هل يعمل على الهاتف؟ معظم عمليات الرفع تحدث على الهواتف، والهواتف تتيح “التقط صورة الآن” بالإضافة إلى “اختر من المكتبة”. اختبر كلا الخيارين على هاتف حقيقي، لا فقط على حاسوبك المحمول حيث تسحب ملفًا فقط.
اختبره كما لو كنت غريبًا عنه
اختبره من خلال محاولة كسره عمدًا بالطريقة التي سيكسره بها مستخدم حقيقي دون قصد — صورة عادية، وملف ضخم الحجم، ونوع ملف خاطئ، ورفع مباشر من كاميرا الهاتف، وعملية حذف — قبل أن تعتبره جاهزًا:
- ارفع صورة هاتف عادية. هل تظهر، وهل المعاينة سريعة؟
- ارفع شيئًا ضخمًا. هل يوقفك التطبيق برسالة واضحة، أم يتجمّد فقط؟
- ارفع النوع الخاطئ — ملف PDF حيث كان يُتوقَّع صورة. هل يشرح القاعدة؟
- افتح التطبيق على هاتفك وارفع مباشرة من الكاميرا.
- احذف سجلًا وتحقق مما إذا كان ملفه يُعالَج بالطريقة التي قررتها.
إذا سلكت الأمور الخمسة كما ينبغي، تكون قد تجاوزت الحواف التي تُعثر معظم الناس.
عمليات الرفع من تلك الميزات حيث الفجوة بين “يعمل في العرض التوضيحي” و”يعمل لغريب في قطار يحمل صورة قطة بحجم 12 ميغابايت” هي بالضبط مجموعة القرارات المذكورة أعلاه. لا شيء منها صعب. إنها فقط سهلة التجاهل — وأسهل بكثير أن تُطلَب الآن من أن تُصلَح لاحقًا.
إذا كنت تؤجل إضافة الرفع لأنه بدا وكأنه قفزة تقنية كبيرة، فهو ليس كذلك. افتح أداة البناء لديك، واطلب تخزين صور مع حد للحجم وصورة مصغّرة، وشاهد ما تقدّمه لك. ثم اذهب وحاول كسره على هاتفك — هذا هو الاختبار الحقيقي، ويستغرق خمس دقائق.