امکان آپلود عکس در اپلیکیشن ساختهشده با هوش مصنوعی (بدون اینکه اپ از پا دربیاید)
اضافه کردن قابلیت آپلود عکس به اپلیکیشنی که با هوش مصنوعی ساختهاید یعنی فایلها را در یک فضای ذخیرهسازی اختصاصی (نه در دیتابیس) نگه دارید، محدودیتی برای حجم و نوع فایل مثل ۱۰ مگابایت تعیین کنید، و یک بندانگشتی (thumbnail) کوچک برای پیشنمایش بسازید — اینها دستورالعملهای اصلیای هستند که باید به سازندهی اپتان بدهید.
همان لحظهای که اپ شما از حالت صرفاً متنی خارج میشود و به کاربران اجازه میدهد عکسی آپلود کنند، یک چیزی تغییر میکند. اضافه کردن قابلیت آپلود عکس و فایل یعنی به کاربر اجازه بدهید عکس، رسید یا سندی را از دستگاه خودش به داخل اپ شما بفرستد، اپ آن را ذخیره کند و بعداً نشانش بدهد — یک عکس پروفایل، یک رسید، عکس یک بستهی آسیبدیده، یا یک قرارداد PDF. این یکی از آن ویژگیهایی است که در ظاهر فقط یک تیک زدن ساده به نظر میرسد، اما زیرش چند لبهی تیز پنهان شده. هیچکدام از آنها سخت نیستند. اما همانهایی که کسی از قبل دربارهشان به شما هشدار نمیدهد، دقیقاً همانهایی هستند که سه هفته بعد از راهاندازی سر و کلهشان پیدا میشود، معمولاً از طرف پرشورترین کاربرتان.
این نوشته یک تور کوتاه است از اینکه وقتی کسی روی «آپلود» میزند واقعاً چه اتفاقی میافتد، سه اشتباهی که دیر بعداً گازتان میگیرند، و دقیقاً چه چیزهایی باید از سازندهی اپتان بخواهید تا اصلاً به آنها برنخورید.
وقتی عکسی را در یک اپ آپلود میکنید، واقعاً چه اتفاقی میافتد؟
آپلود یک عکس، چهار مرحله را به ترتیب فعال میکند: گوشیتان فایل را به اپ میدهد، اپ آن را به یک فضای ذخیرهسازی فایل جداگانه (نه دیتابیس) میفرستد، اپ یک لینک به آن فایل را کنار رکورد ذخیره میکند، و بعداً هر وقت کسی آن رکورد را ببیند، اپ فایل را با استفاده از همان لینک واکشی میکند.
مرحله به مرحله اینطور است:
۱. گوشی، فایل را به اپ شما تحویل میدهد. یک عکس معمولی از گوشیهای امروزی معمولاً بین ۴ تا ۱۲ مگابایت است. رقم کمی نیست. ۲. اپ شما آن فایل را برای ذخیرهسازی به جایی میفرستد — نه در دیتابیس اپتان، بلکه در یک «باکت» ذخیرهسازی جداگانه که مخصوص فایلها ساخته شده. ۳. اپ شما یک لینک به آن فایل را در دیتابیس، کنار بقیهی اطلاعات آن رکورد ذخیره میکند (این رسید متعلق به این هزینه است). ۴. بعداً وقتی کسی آن رکورد را باز میکند، اپ فایل را از همان فضای ذخیرهسازی با استفاده از آن لینک واکشی و نمایش میدهد.
جایی که مردم اشتباه میکنند مرحلهی ۲ و ۳ است. آنها تصور میکنند عکس «داخل اپ ذخیره میشود». نه، اینطور نیست و نباید هم باشد. فایلها در فضای ذخیرهسازی زندگی میکنند؛ دیتابیس شما فقط بهخاطر میسپارد کجاست. اگر این تفکیک را درست انجام بدهید، همهچیز از آن به بعد سادهتر میشود.
آیا باید عکسهای آپلودشده را مستقیماً در دیتابیس ذخیره کنید؟
نه — و این رایجترین اشتباه در آپلود فایل است، اشتباهی که سازندههای هوش مصنوعی گاهی بهصورت پیشفرض مرتکب میشوند اگر شما دقیق نگفته باشید چه میخواهید. چپاندن یک عکس ۱۰ مگابایتی مستقیم داخل دیتابیس، مثل نگهداشتن مبلمانتان در کیف پولتان است. دیتابیس برای چیزهای کوچک و ساختاریافته ساخته شده — اسمها، تاریخها، قیمتها. اگر عکسها را در آن بریزید، کند میشود، بکآپها متورم میشوند، و یک روز صفحهای که قبلاً آنی باز میشد، شش ثانیه طول میکشد چون دارد صد عکس با کیفیت کامل را دنبال خودش میکشد.
چیزی که بهجایش میخواهید این است: فایل به فضای ذخیرهسازی فایل برود (ممکن است سازندهی اپتان به آن «باکت ذخیرهسازی» یا «blob storage» بگوید)، و دیتابیس فقط لینک را نگه دارد. مستقیم همین را بخواهید:
«تصاویر آپلودشده را در فضای ذخیرهسازی فایل نگه دار، نه در دیتابیس. فقط لینک فایل را در رکورد ذخیره کن.»
چطور جلوی آپلود نوع فایل اشتباه یا یک فایل خیلی بزرگ را بگیرید؟
از قبل تصمیم میگیرید چه چیزی مجاز است — نوع فایل، محدودیت حجم، و یک پیام خطای واضح — و آن را صریح به سازندهی اپتان میگویید، چون بدون این قوانین اپ شما هر چیزی را قبول میکند، از جمله فایلهایی که کل فرآیند آپلود را قفل میکنند. دو سناریوی واقعی نشان میدهند چرا، هر دو از اپهایی که موقع تست بینقص کار میکردند:
یک زن که کسبوکار کوچک کیترینگ دارد، اپی ساخت تا مشتریها عکس کیکهایی که دوست داشتند را آپلود کنند. همهچیز عالی پیش میرفت تا اینکه یک مشتری عکسی ۴۷ مگابایتی، مستقیم از یک دوربین حرفهای آپلود کرد. آپلود گیر کرد، مشتری کلافه شد و رفت، و او فقط این را شنید که «اپت خراب است». خراب نبود — فقط هیچوقت محدودیت حجمی تعیین نشده بود، پس اپ همانجا نشست و تا ابد سعی کرد یک فایل غولپیکر را قورت بدهد.
یک نمونهی دیگر: یک فریلنسر یک پورتال برای مشتریهایش ساخت که در آن «لوگوی خودشان» را آپلود کنند. یک مشتری یک فایل .zip آپلود کرد. یکی دیگر یک PDF نودصفحهای فرستاد. اپ همهشان را قبول کرد چون هیچکس به آن نگفته بود یک لوگو باید چه شکلی باشد.
از قبل این سه چیز را مشخص کنید:
- چه نوع فایلی؟ فقط عکس؟ پس JPG و PNG را قبول کن و بقیه را با یک پیام دوستانه رد کن.
- چه اندازهای؟ یک محدودیت منطقی برای عکس چیزی حدود ۵ تا ۱۰ مگابایت است. بهاندازهی کافی بزرگ برای یک عکس واقعی از گوشی، و بهاندازهی کافی کوچک برای جلوگیری از یک تخلیهی کامل دوربین.
- اگر اشتباه بود چه؟ اپ باید مهربانانه بگوید — «لطفاً یک فایل JPG یا PNG کمتر از ۱۰ مگابایت آپلود کن» — نه اینکه فقط قفل کند.
به سازندهی اپتان بگویید:
«فقط اجازه بده تصاویر JPG و PNG تا سقف ۱۰ مگابایت آپلود شوند. اگر کسی چیز دیگری یا فایلی بزرگتر آپلود کرد، بهجای شکست خوردن بیصدا، یک پیام واضح نشان بده.»
چرا وقتی اپ شما عکس زیاد دارد، کند به نظر میرسد؟
چون هر بار که کسی رکورد را باز میکند، نسخهی اصلی با اندازهی کامل دانلود میشود، نه یک نسخهی کوچکشده — روی گوشیاش، با بستهی اینترنتش، هر بار. فرض کنید کسی یک عکس واضح ۸ مگابایتی آپلود میکند و بهتنهایی خوب کار میکند. حالا این را در یک گالری بیستعکسی ضرب کنید و اپ سریع کوچک شما مثل راهرفتن در گل میشود.
راهحل اسمی دارد که ارزش دانستن دارد چون سازندهی اپتان آن را میشناسد: یک thumbnail، یا نسخهی تغییراندازهیافته. ایده این است که نسخهی اصلی را نگه دارید اما یک کپی کوچک و مناسب وب هم بسازید، و آن کپی کوچک را در لیستها و پیشنمایشها نشان بدهید. نسخهی کامل فقط وقتی بارگذاری میشود که کسی واقعاً بخواهد آن را در اندازهی بزرگ ببیند.
«وقتی تصویری آپلود میشود، یک نسخهی کوچکتر و تغییراندازهیافته هم برای پیشنمایشها و لیستها بساز. بهصورت پیشفرض نسخهی کوچک را نشان بده و فقط وقتی کسی روی آن کلیک کرد که کاملش را ببیند، تصویر کامل را بارگذاری کن.»
نیازی نیست بدانید چطور این کار انجام میشود. فقط باید بدانید که چنین چیزی وجود دارد، تا قبل از اینکه اپتان کند شود، آن را بخواهید، نه بعدش.
چند تصمیم آرامتر که ارزش گرفتن دارند
این سه تصمیم اگر از قلم بیفتند اپ شما را خراب نمیکنند، اما الان گرفتنشان ارزانتر از اضافهکردن بعدیشان است: چه کسی میتواند فایل را ببیند، وقتی رکورد حذف میشود چه بلایی سر فایل میآید، و اینکه آپلود روی گوشی هم درست کار میکند یا نه.
- چه کسی میتواند فایل را ببیند؟ یک عکس پروفایل برای هر کسی قابل مشاهده باشد اشکالی ندارد. اما اسکن یک کارت شناسایی یا یک قرارداد امضاشده اینطور نیست. اگر فایل خصوصی است، به سازندهی اپتان بگویید لینک باید نیاز به ورود (login) داشته باشد، نه یک URL عمومی که هر کسی بتواند بازش کند. این چیزی است که برای هر دادهی حساسی بیشترین تأکید را روی آن میگذارم.
- وقتی رکورد حذف میشود چه اتفاقی میافتد؟ اگر کسی یک هزینه را حذف کند، آیا عکس رسیدش هم باید پاک شود؟ در غیر اینصورت، کمکم فایلهای بیصاحبی جمع میکنید که هزینهی نگهداریشان را میپردازید و اصلاً یادتان رفته وجود دارند.
- آیا روی گوشی کار میکند؟ بیشتر آپلودها روی گوشی اتفاق میافتند، و گوشیها هم گزینهی «همین الان عکس بگیر» را دارند و هم «از گالری انتخاب کن». هر دو را روی یک گوشی واقعی تست کنید، نه فقط روی لپتاپتان جایی که همیشه فقط یک فایل را میکشید و رها میکنید.
مثل یک غریبه تستش کنید
آن را با تلاش عمدی برای خرابکردنش، به همان شکلی که یک کاربر واقعی بهطور اتفاقی انجام میدهد، تست کنید — یک عکس معمولی، یک فایل بیشازحد بزرگ، نوع فایل اشتباه، یک آپلود زنده از دوربین گوشی، و یک حذف — قبل از اینکه بگویید کارتان تمام شده:
- یک عکس معمولی از گوشی آپلود کنید. آیا نمایش داده میشود، و آیا پیشنمایشش سریع است؟
- یک چیز بسیار بزرگ آپلود کنید. آیا اپ با یک پیام واضح جلویتان را میگیرد، یا فقط گیر میکند؟
- نوع اشتباهی آپلود کنید — یک PDF جایی که انتظار عکس میرود. آیا قانونش را توضیح میدهد؟
- اپ را روی گوشیتان باز کنید و مستقیم از دوربین آپلود کنید.
- یک رکورد را حذف کنید و ببینید فایلش دقیقاً همانطور که تصمیم گرفته بودید مدیریت میشود یا نه.
اگر هر پنج مورد درست رفتار کنند، از پس آن لبههای تیزی که بیشتر آدمها را گیر میاندازد برآمدهاید.
آپلود فایل یکی از آن ویژگیهایی است که فاصلهی بین «توی دمو کار میکند» و «برای یک غریبه توی قطار با یک عکس گربهی ۱۲ مگابایتی هم کار میکند» دقیقاً همین تصمیمهایی است که بالا آمد. هیچکدام سخت نیستند. فقط راحت از قلم میافتند — و الان خواستنشان خیلی راحتتر از تعمیرشان بعداً است.
اگر داشتید اضافهکردن آپلود را عقب میانداختید چون حس میکردید یک جهش فنی بزرگ است، اینطور نیست. سازندهی اپتان را باز کنید، فضای ذخیرهسازی تصویر با محدودیت حجم و یک thumbnail بخواهید، و ببینید چه چیزی به شما میدهد. بعد بروید روی گوشیتان امتحان کنید خرابش کنید — آن تست واقعی است، و پنج دقیقه بیشتر طول نمیکشد.