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

StatusCand
400Lipseste campul file
401Token lipsa sau invalid
500Eroare 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.