REST API documentation & reusable function templates untuk integrasi ke aplikasi, bot, atau project lainnya.
Periksa status server sebelum upload.
curl https://cdn.izukaprivate.my.id/health
const res = await fetch('https://cdn.izukaprivate.my.id/health'); const data = await res.json(); console.log(data);
import requests res = requests.get('https://cdn.izukaprivate.my.id/health') print(res.json())
Upload file sebagai multipart/form-data. Max 5 MB per file.
https://cdn.izukaprivate.my.id/cdn/{filename}
curl -X POST https://cdn.izukaprivate.my.id/upload \ -F "file=@./file.jpg"
async function uploadToCDN(buffer, filename, mimetype = 'application/octet-stream') { const form = new FormData(); form.append('file', new Blob([buffer], { type: mimetype }), filename); const res = await fetch('https://cdn.izukaprivate.my.id/upload', { method: 'POST', body: form }); const data = await res.json(); if (!res.ok) throw new Error(data.error); const fn = data.url.split('/').pop(); return `https://cdn.izukaprivate.my.id/cdn/${fn}`; }
const axios = require('axios'); const FormData = require('form-data'); async function uploadToCDN(buffer, filename) { const form = new FormData(); form.append('file', buffer, { filename }); const { data } = await axios.post( 'https://cdn.izukaprivate.my.id/upload', form, { headers: form.getHeaders() } ); const fn = data.url.split('/').pop(); return `https://cdn.izukaprivate.my.id/cdn/${fn}`; }
import requests import io def upload_to_cdn(buffer: bytes, filename: str) -> str: files = {'file': (filename, io.BytesIO(buffer))} res = requests.post('https://cdn.izukaprivate.my.id/upload', files=files) data = res.json() if res.status_code != 200: raise Exception(data.get('error')) fn = data['url'].split('/')[-1] return f'https://cdn.izukaprivate.my.id/cdn/{fn}'
Untuk bot async atau aplikasi yang memerlukan non-blocking I/O.
import aiohttp import io async def upload_to_cdn_async(buffer: bytes, filename: str) -> str: form = aiohttp.FormData() form.add_field('file', io.BytesIO(buffer), filename=filename) async with aiohttp.ClientSession() as session: async with session.post( 'https://cdn.izukaprivate.my.id/upload', data=form ) as r: data = await r.json() fn = data['url'].split('/')[-1] return f'https://cdn.izukaprivate.my.id/cdn/{fn}'
Wrapper lengkap dengan retry logic dan validasi file size.
const MAX_SIZE = 5 * 1024 * 1024; async function safeCDNUpload(buffer, filename, maxRetries = 3) { if (buffer.length > MAX_SIZE) throw new Error('File terlalu besar'); for (let i = 1; i <= maxRetries; i++) { try { const form = new FormData(); form.append('file', new Blob([buffer]), filename); const res = await fetch('https://cdn.izukaprivate.my.id/upload', { method: 'POST', body: form }); const data = await res.json(); if (!res.ok) throw new Error(data.error); const fn = data.url.split('/').pop(); return `https://cdn.izukaprivate.my.id/cdn/${fn}`; } catch (err) { if (i === maxRetries) throw err; await new Promise(r => setTimeout(r, 1000 * i)); // backoff } } }
cdn.izukaprivate.my.id/cdn/ untuk kecepatan optimal.