Sawala CloudSawala Cloud — Docs
Berkasna

Cara upload file publik

Pola minimal upload-and-share — tiga panggilan API, satu URL publik yang bisa langsung dipakai.

Untuk kasus di mana Anda butuh menerima upload file dari pengguna, menyimpannya di Berkasna, dan langsung mendapatkan URL publik — gunakan pola tiga-panggilan berikut.

Langkah-langkah

  1. Minta slot upload dari aplikasi Anda (server-side, dengan secret key):

    POST https://api.sawala.cloud/public/berkasna/upload/presigned
    X-API-Key: sk_live_xxx
    Content-Type: application/json
    
    { "filename": "avatar.png", "mimeType": "image/png", "size": 102400 }

    Response mengembalikan { assetId, uploadUrl, expiresAt }.

  2. PUT file ke uploadUrl dari browser pengguna:

    await fetch(uploadUrl, {
      method:  'PUT',
      headers: { 'Content-Type': file.type },
      body:    file,
    });
  3. Tandai selesai dari aplikasi Anda:

    POST https://api.sawala.cloud/public/berkasna/upload/complete
    X-API-Key: sk_live_xxx
    Content-Type: application/json
    
    { "assetId": "ast_abc123" }

    Response: { id, status: "completed", url: "https://files.sawala.cloud/..." }.

URL di url siap dipakai langsung — pasang di <img src>, kirim ke pengguna lewat email, atau simpan di database aplikasi Anda.

uploadUrl punya masa berlaku ~15 menit. Jika pengguna lambat menyelesaikan upload, request slot baru. Slot lama tidak otomatis dihapus tapi tidak bisa dipakai lagi.

Validasi sebelum upload

Untuk mencegah upload file yang tidak diinginkan, validasi di sisi klien sebelum langkah 1:

const MAX_SIZE_MB = 5;
const ALLOWED     = ['image/jpeg', 'image/png', 'image/webp'];

if (file.size > MAX_SIZE_MB * 1024 * 1024) {
  alert(`Ukuran maksimal ${MAX_SIZE_MB} MB`);
  return;
}
if (!ALLOWED.includes(file.type)) {
  alert('Format file tidak didukung');
  return;
}

Berkasna sendiri menerima file hingga 200 MB; batasi lebih ketat di aplikasi Anda jika perlu.

Deduplikasi

Untuk menghindari menyimpan file yang sama dua kali, hitung hash SHA-256 file di browser dan tanyakan ke Berkasna sebelum minta slot:

const hash = await sha256(file);

const res = await fetch(
  `https://api.sawala.cloud/public/berkasna/upload/check-duplicate?hash=${hash}`,
  { headers: { 'X-API-Key': 'pk_live_xxx' } }
);

const { exists, asset } = await res.json();
if (exists) {
  // Pakai langsung; tidak perlu upload lagi.
  return asset.url;
}
// Lanjut ke langkah 1.

Daftar Isi