TurboJet
Storage

Gambaran umum

Unggah file yang kompatibel dengan S3 lewat URL terpresign di @repo/storage.

TurboJet menyertakan lapisan penyimpanan file untuk mengunggah gambar, dokumen, dan aset lain ke cloud. Cocok dengan provider kompatibel S3 — AWS S3, Cloudflare R2, DigitalOcean Spaces, MinIO, dan lainnya. Docs dan .env.example default ke Cloudflare R2.

Helper ada di @repo/storage. Endpoint HTTP terautentikasi di-mount di /api/storage pada app marketing.

Belum ada UI unggah

Belum ada UI unggah file di apps/marketing. Package, model Prisma File, dan route Hono siap dipakai client yang Anda tambahkan sendiri.

Mengunggah di arsitektur serverless

Route handler Next.js (dan Hono di belakangnya) punya batas di platform serverless — waktu eksekusi dan ukuran body. Mengirim file besar lewat API kurang cocok.

TurboJet memakai URL terpresign:

  1. Client meminta URL unggah berumur pendek dari API (auth dan validasi tetap di server).
  2. Client mengunggah file langsung ke provider penyimpanan dengan PUT.
  3. Client mengonfirmasi unggahan agar API menandai baris Prisma File sebagai READY.

Kredensial tidak pernah sampai ke browser. Anda menghindari batas payload serverless sambil tetap mengatur siapa yang boleh mengunggah.

Panduan

Panduan provider

Pertanyaan yang sering diajukan

Provider mana yang cocok?

Semua provider yang mengimplementasikan API S3. Konfigurasi dengan S3_ENDPOINT, kredensial, dan S3_BUCKET. Docker Compose lokal tidak menyertakan MinIO atau SeaweedFS — pakai bucket cloud (atau jalankan layanan S3 sendiri) lalu arahkan env ke sana.

Berapa ukuran unggah maksimum?

API memvalidasi unggahan hingga 10 MB dan mengizinkan jpeg, png, gif, webp, PDF, dan teks polos (packages/validations/src/storage/storage.ts). Karena body file ke provider lewat URL terpresign, batas body serverless tidak berlaku pada biner itu sendiri. Sesuaikan batas Zod jika produk Anda butuh aturan lain.

Bagaimana alur unggah file?

GET /api/storage/upload membuat file PENDING dan mengembalikan URL PUT terpresign. Client mengunggah ke URL itu, lalu memanggil POST /api/storage/confirm untuk menandai file READY. Lihat Unggah file.

Apakah CORS perlu dikonfigurasi?

Ya. Unggahan dari browser bersifat lintas origin ke host penyimpanan. Izinkan origin marketing (NEXT_PUBLIC_MARKETING_URL) untuk PUT, GET, dan HEAD, serta header yang dibutuhkan client (minimal Content-Type). Detail di Setup dan panduan provider.

Di halaman ini