Body: multipart/form-data, field apikey dan file. Limit ukuran sesuai Cloudflare Workers (Free plan ±100MB).
curl -X POST https://cdn.xiaocia.my.id/upload \ -F "apikey=X14OC14" \ -F "file=@/path/ke/file.jpg"
Response sukses:
{
"status": true,
"creator": "Xiaocia",
"result": {
"url": "https://cdn.xiaocia.my.id/file/13.jpg",
"name": "file.jpg",
"size": 149086,
"mimetype": "image/jpeg"
}
}
| Status | Kondisi |
|---|---|
| 400 | Field file gak ada |
| 403 | API key salah/kosong |
| 405 | Method bukan POST |
| 500 | Error dari Telegram/server |
GIF diam (loop, tanpa suara) otomatis di-convert Telegram jadi .mp4 — ekstensi URL hasil bisa beda dari file asli. Behavior Telegram.
Stream file yang udah diupload. Gak butuh apikey, link publik.
GET https://cdn.xiaocia.my.id/file/13.jpg
404 kalau file gak ketemu: {"status":false,"message":"File tidak ditemukan atau link sudah kedaluwarsa."}
const axios = require('axios');
const FormData = require('form-data');
async function uploadToXiaocia(fileUrl, fileName) {
const fileRes = await axios.get(fileUrl, { responseType: 'arraybuffer' });
const form = new FormData();
form.append('apikey', 'X14OC14');
form.append('file', Buffer.from(fileRes.data), fileName);
const res = await axios.post('https://cdn.xiaocia.my.id/upload', form, {
headers: form.getHeaders(),
});
return res.data.result.url;
}
// const url = await uploadToXiaocia(attachment.url, attachment.name);
// message.reply(`Link: ${url}`);
async function uploadFromTelegramFile(bot, fileId, fileName) {
const fileLink = await bot.getFileLink(fileId);
return uploadToXiaocia(fileLink, fileName);
}
import aiohttp
async def upload_to_xiaocia(file_bytes: bytes, filename: str, api_key: str) -> str:
async with aiohttp.ClientSession() as session:
form = aiohttp.FormData()
form.add_field('apikey', api_key)
form.add_field('file', file_bytes, filename=filename)
async with session.post('https://cdn.xiaocia.my.id/upload', data=form) as resp:
data = await resp.json()
if not data['status']:
raise Exception(data['message'])
return data['result']['url']
Pake result.url buat dikirim ke user, bukan result.name.
file_<id>.<ext>) yang gak resmi didokumentasikan.