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
-
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 }. -
PUT file ke
uploadUrldari browser pengguna:await fetch(uploadUrl, { method: 'PUT', headers: { 'Content-Type': file.type }, body: file, }); -
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.