Membiarkan Pengguna Mengunggah Foto ke Aplikasi Buatan AI-mu (Tanpa Bikin Aplikasinya Ambruk)

Menambahkan fitur unggah foto ke aplikasi buatan AI berarti menyimpan file di penyimpanan file khusus (bukan di database), menetapkan batas ukuran dan jenis file seperti 10 MB, dan membuat thumbnail pratinjau kecil — instruksi inti yang perlu kamu berikan ke builder-mu.

Begitu aplikasimu berhenti hanya berisi teks dan mulai membiarkan orang mengunggah foto, ada sesuatu yang berubah. Menambahkan fitur unggah gambar dan file berarti membiarkan pengguna mengirim foto, struk, atau dokumen dari perangkat mereka ke aplikasimu, yang kemudian menyimpannya dan menampilkannya kembali nanti — foto profil, struk belanja, foto paket yang rusak, kontrak PDF. Ini salah satu fitur yang kelihatannya cuma satu kotak centang, tapi ternyata punya beberapa sisi tajam di baliknya. Tak satu pun dari itu sulit. Tapi yang tidak diperingatkan siapa pun biasanya baru muncul tiga minggu setelah peluncuran, biasanya dari penggunamu yang paling antusias.

Ini adalah tur tentang apa yang sebenarnya terjadi saat seseorang menekan “unggah,” tiga kesalahan yang baru terasa belakangan, dan hal-hal persis yang perlu kamu minta dari builder-mu supaya kamu tidak mengalaminya.

Apa yang sebenarnya terjadi saat kamu mengunggah foto ke sebuah aplikasi?

Mengunggah foto memicu empat langkah berurutan: ponselmu menyerahkan file ke aplikasi, aplikasi mengirimkannya ke penyimpanan file terpisah (bukan ke database), aplikasi menyimpan tautan ke file itu di samping datanya, dan nanti aplikasi mengambil file tersebut menggunakan tautan itu setiap kali seseorang melihat datanya.

Begini gambarannya langkah demi langkah:

  1. Ponsel menyerahkan file ke aplikasimu. Foto ponsel modern seringkali berukuran 4 hingga 12 megabyte. Itu bukan ukuran yang kecil.
  2. Aplikasimu mengirim file itu ke suatu tempat untuk disimpan — bukan di database aplikasimu, melainkan di bucket penyimpanan terpisah yang dibuat khusus untuk file.
  3. Aplikasimu menyimpan tautan ke file itu di database, di samping data lainnya (struk ini milik pengeluaran ini).
  4. Nanti, saat seseorang melihat datanya, aplikasi mengambil file dari penyimpanan menggunakan tautan itu dan menampilkannya.

Bagian yang sering salah dipahami orang adalah langkah 2 dan 3. Mereka membayangkan foto itu “tersimpan di aplikasi.” Padahal tidak, dan memang seharusnya tidak begitu. File hidup di penyimpanan; database-mu hanya mengingat lokasinya. Kalau pemisahan ini benar, semua hal berikutnya jadi lebih mudah.

Apakah kamu harus menyimpan foto yang diunggah langsung di database?

Tidak — dan ini kesalahan unggah yang paling umum, sesuatu yang kadang secara default akan dilakukan builder AI kalau kamu tidak spesifik. Menjejalkan foto 10 MB langsung ke database-mu itu seperti menyimpan perabotan di dompetmu. Database dibuat untuk hal-hal kecil dan terstruktur — nama, tanggal, harga. Tuangkan foto ke dalamnya dan semuanya jadi lambat, backup membengkak, dan suatu hari halaman yang dulu langsung terbuka jadi butuh enam detik karena harus menyeret ratusan gambar beresolusi penuh sekaligus.

Yang kamu inginkan sebaliknya: file masuk ke penyimpanan file (builder-mu mungkin menyebutnya “storage bucket” atau “blob storage”), dan database hanya menyimpan tautannya. Minta langsung saja:

“Simpan gambar yang diunggah di penyimpanan file, bukan di database. Simpan hanya URL file-nya di data.”

Bagaimana cara mencegah pengguna mengunggah jenis file yang salah atau file yang terlalu besar?

Kamu menentukan lebih dulu apa yang diizinkan — jenis file, batas ukuran, dan pesan kesalahan yang jelas — dan menyampaikannya secara eksplisit ke builder-mu, karena tanpa aturan itu aplikasimu akan menerima apa saja, termasuk file yang bisa membuat proses unggah macet total. Dua skenario nyata menunjukkan alasannya, keduanya dari aplikasi yang berjalan lancar saat pengujian:

Seorang perempuan menjalankan bisnis katering kecil dan membuat aplikasi agar kliennya bisa mengunggah foto kue yang mereka sukai. Berjalan lancar sampai seorang klien mengunggah foto 47 MB langsung dari kamera profesional. Proses unggahnya macet, kliennya menyerah, dan dia mendengar keluhannya sebagai “aplikasimu rusak.” Padahal tidak rusak — hanya saja tidak pernah ada batas ukuran yang ditetapkan, jadi aplikasinya tersendat selamanya mencoba menelan file yang besar itu.

Contoh kedua: seorang pekerja lepas membuat portal klien tempat orang mengunggah “logo mereka.” Satu klien mengunggah file .zip. Klien lain mengunggah PDF 90 halaman. Aplikasinya menerima semuanya karena tidak ada yang memberi tahu apa itu seharusnya bentuk sebuah logo.

Tentukan tiga hal ini lebih dulu:

  • Jenis file apa? Hanya foto? Kalau begitu terima JPG dan PNG, tolak yang lain, dengan pesan yang ramah.
  • Seberapa besar? Batas foto yang masuk akal sekitar 5 sampai 10 MB. Cukup besar untuk foto ponsel sungguhan, cukup kecil untuk mencegah dump kamera.
  • Bagaimana kalau salah? Aplikasi harus memberi tahu dengan ramah — “Silakan unggah JPG atau PNG di bawah 10 MB” — bukan sekadar macet begitu saja.

Sampaikan ke builder-mu:

“Hanya izinkan gambar JPG dan PNG hingga 10 MB. Jika seseorang mengunggah jenis lain atau ukurannya terlalu besar, tampilkan pesan yang jelas alih-alih gagal diam-diam.”

Kenapa aplikasimu terasa lambat saat memiliki banyak foto?

Karena setiap kali dilihat, aplikasi mengunduh foto aslinya secara penuh, bukan versi yang sudah diperkecil — di ponsel pengguna, dengan kuota datanya, setiap kali seseorang membuka datanya. Katakanlah seseorang mengunggah foto tajam 8 MB dan itu berjalan lancar sendirian. Kalikan itu dengan galeri berisi dua puluh foto dan aplikasi kecilmu yang cepat jadi terasa seperti berjalan di lumpur.

Solusinya punya nama yang layak diketahui karena builder-mu akan mengenalinya: sebuah thumbnail, atau versi yang diubah ukurannya. Idenya, kamu tetap menyimpan yang asli tapi juga membuat salinan kecil yang ramah web, lalu menampilkan salinan kecil itu di daftar dan pratinjau. Versi penuhnya baru dimuat saat seseorang benar-benar ingin melihatnya besar.

“Saat gambar diunggah, buat juga versi yang diperkecil untuk pratinjau dan daftar. Tampilkan versi kecil secara default dan hanya muat gambar penuh saat seseorang mengklik untuk melihatnya.”

Kamu tidak perlu memahami bagaimana cara kerjanya. Kamu cuma perlu tahu bahwa fitur ini ada, supaya kamu bisa memintanya sebelum aplikasimu terasa lambat, bukan sesudahnya.

Beberapa hal lain yang lebih diam-diam tapi layak diputuskan

Tiga keputusan ini tidak akan membuat aplikasimu rusak kalau kamu lewatkan, tapi lebih murah diputuskan sekarang daripada ditambal belakangan: siapa yang bisa melihat file-nya, apa yang terjadi padanya saat datanya dihapus, dan apakah unggah berfungsi di ponsel.

  • Siapa yang bisa melihat file-nya? Foto profil boleh dilihat siapa saja. KTP yang dipindai atau kontrak yang ditandatangani tidak boleh. Kalau file-nya bersifat privat, beri tahu builder-mu bahwa tautannya harus mewajibkan login, bukan jadi URL publik yang bisa dibuka siapa saja. Ini satu hal yang paling akan kudorong keras untuk apa pun yang sensitif.
  • Apa yang terjadi saat datanya dihapus? Kalau seseorang menghapus pengeluaran, apakah foto struknya juga harus dibersihkan? Kalau tidak, kamu perlahan-lahan menumpuk file yatim yang kamu bayar untuk disimpan dan lupa kamu punya.
  • Apakah berfungsi di ponsel? Sebagian besar unggahan terjadi di ponsel, dan ponsel menawarkan “ambil foto sekarang” selain “pilih dari galeri.” Uji keduanya di ponsel sungguhan, bukan cuma di laptopmu tempat kamu hanya pernah menyeret file masuk.

Ujilah seperti orang asing akan mengujinya

Ujilah dengan sengaja mencoba merusaknya seperti pengguna sungguhan tanpa sengaja akan melakukannya — foto normal, file berukuran terlalu besar, jenis file yang salah, unggahan langsung dari kamera ponsel, dan penghapusan — sebelum kamu menyebutnya selesai:

  • Unggah foto ponsel normal. Apakah muncul, dan apakah pratinjaunya cepat?
  • Unggah sesuatu yang besar. Apakah aplikasinya menghentikanmu dengan pesan yang jelas, atau cuma macet begitu saja?
  • Unggah jenis yang salah — PDF di tempat yang seharusnya foto. Apakah dijelaskan aturannya?
  • Buka aplikasinya di ponselmu dan unggah langsung dari kamera.
  • Hapus sebuah data dan periksa apakah file-nya ditangani sesuai keputusan yang kamu buat.

Kalau kelima hal ini berjalan sesuai harapan, kamu sudah melewati sisi-sisi tajam yang menjegal kebanyakan orang.

Unggahan adalah salah satu fitur di mana jarak antara “berfungsi di demo” dan “berfungsi untuk orang asing di kereta dengan foto kucing 12 MB” persis sama dengan kumpulan keputusan di atas. Tak satu pun dari itu sulit. Hanya saja gampang dilewatkan — dan jauh lebih mudah diminta sekarang daripada diperbaiki belakangan.

Kalau kamu selama ini menunda menambahkan fitur unggah karena terasa seperti lompatan teknis yang besar, sebenarnya tidak. Buka builder-mu, minta penyimpanan gambar dengan batas ukuran dan thumbnail, lalu lihat apa yang diberikannya. Setelah itu, coba rusak di ponselmu — itulah ujian sesungguhnya, dan cuma butuh lima menit.