Incarca un fisier
Upload API
API pentru incarcarea fisierelor in stocare. Raspunsurile au forma standard { success, message, data }. Ruta de upload este protejata cu un Bearer token; vizualizarea fisierelor este publica.
Base URL: https://karpaten-upload.pages.dev
Autentificare
Fiecare cerere catre POST /api/upload trebuie sa includa header-ul:
Authorization: Bearer <TOKEN>Token-ul ti-l furnizam separat. Fara el, API-ul raspunde cu 401.
POST /api/upload
Incarca un fisier. Body de tip multipart/form-data cu campul file.
Raspuns 200
{
"success": true,
"message": "Fisier incarcat cu succes",
"data": {
"key": "1780509126286-poza.png",
"url": "https://static.karpaten.ro/1780509126286-poza.png",
"size": 53241,
"contentType": "image/png"
}
}url— link-ul public prin care vizualizezi/descarci fisierul.key— cheia unica a fisierului in stocare.size/contentType— dimensiunea si tipul fisierului.
Erori
| Status | Cand |
|---|---|
400 | Lipseste campul file |
401 | Token lipsa sau invalid |
500 | Eroare de configurare pe server |
Vizualizarea fisierului
Deschide direct data.url din raspuns. Fisierele sunt servite public de pe CDN (static.karpaten.ro), cu cache si fara token.
Interfata UI + Cloudflare Access
Formularul de mai sus posteaza la endpoint-ul intern POST /upload-ui, care reutilizeaza aceeasi logica de scriere, dar fara verificare de token. Fiind in afara lui /api/*, ruta este acoperita automat de Cloudflare Access — nu mai e nevoie de o regula separata in Access (cum era la vechiul /api/upload-ui).
Modelul de protectie:
- Access acopera tot, mai putin
/api/*(si, optional,/files/*). /api/upload— protejat de Bearer token (integrari).- vizualizare fisiere — publica, prin CDN
static.karpaten.ro.
Exemple
cURL
curl -X POST https://upload.karpaten.ro/api/upload \
-H "Authorization: Bearer $TOKEN" \
-F "file=@/cale/catre/poza.png"JavaScript (browser / Node 18+)
const form = new FormData()
form.append('file', fileInput.files[0])
const res = await fetch('https://upload.karpaten.ro/api/upload', {
method: 'POST',
headers: { Authorization: `Bearer ${TOKEN}` },
body: form
})
const json = await res.json()
if (json.success) {
console.log('URL fisier:', json.data.url)
}PHP
$ch = curl_init('https://upload.karpaten.ro/api/upload');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
CURLOPT_POSTFIELDS => ['file' => new CURLFile('/cale/catre/poza.png')],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $response['data']['url'];Note
- Dimensiune maxima per cerere: ~100 MB.
- Fisierele incarcate sunt accesibile public prin
url-ul returnat.