APIUploadWebDAV

Ανέβασμα βίντεο μέσω API: curl, Python, Node.js, WebDAV και FTP

Ανεβάστε και εισαγάγετε βίντεο με το REST API του UFOLOAD μέσω curl, Python και Node.js, περιμένετε την κωδικοποίηση και χρησιμοποιήστε WebDAV ή FTP.

Μπορείτε να ανεβάσετε ένα βίντεο στο UFOLOAD χωρίς να ανοίξετε ποτέ τον πίνακα ελέγχου. Το REST API δέχεται ανεβάσματα μέσω HTTPS, ο διακομιστής μπορεί να κατεβάσει ένα αρχείο από σύνδεσμο για εσάς και ο ίδιος λογαριασμός είναι προσβάσιμος μέσω WebDAV και FTP για εργαλεία που ήδη μιλούν αυτά τα πρωτόκολλα. Αυτός ο οδηγός περνά και από τους πέντε δρόμους με εντολές που λειτουργούν, εξηγεί τι απαντά ο διακομιστής και δείχνει πώς να περιμένετε να ολοκληρωθεί η κωδικοποίηση. Τα endpoints παρακάτω ελέγχθηκαν με βάση τη δημόσια προδιαγραφή OpenAPI· η τεκμηρίωση API περιέχει την πλήρη αναφορά.

Δημιουργήστε κλειδί API

Δημιουργήστε ένα κλειδί στην ενότητα Developers του πίνακα ελέγχου. Κάθε αίτημα το μεταφέρει ως bearer token στην κεφαλίδα Authorization. Το κλειδί εμφανίζεται μόνο μία φορά κατά τη δημιουργία του, οπότε αποθηκεύστε το σε μεταβλητή περιβάλλοντος ή σε διαχειριστή μυστικών και ανακαλέστε το από τον πίνακα ελέγχου αν διαρρεύσει. Το ίδιο κλειδί λειτουργεί ως κωδικός πρόσβασης για WebDAV και FTP, με το email του λογαριασμού σας ως όνομα χρήστη. Αν δεν έχετε ακόμη λογαριασμό, δημιουργήστε έναν δωρεάν· η σελίδα τιμών απαριθμεί το όριο μεγέθους αρχείου και τα όρια αποθήκευσης και κίνησης που ισχύουν για το πρόγραμμά σας.

bash
export UFOLOAD_API_KEY="ufo_..."

Ανέβασμα με curl

Το πιο απλό ανέβασμα στέλνει το αρχείο ως ακατέργαστο σώμα αιτήματος και βάζει το όνομά του στην κεφαλίδα X-File-Name. Στείλτε το όνομα κωδικοποιημένο με percent-encoding (UTF-8) αν περιέχει κενά ή χαρακτήρες εκτός ASCII. Από προεπιλογή το αρχείο καταλήγει στον ριζικό φάκελο· προσθέστε ?folder_id= ή κεφαλίδα X-Folder-Id για να επιλέξετε άλλον.

Ακατέργαστο σώμα · bash
curl -X POST "https://ufoload.com/api/v1/files?folder_id=root" \
  -H "Authorization: Bearer $UFOLOAD_API_KEY" \
  -H "X-File-Name: holiday-2026.mp4" \
  -H "Content-Type: video/mp4" \
  --data-binary @holiday-2026.mp4

Λειτουργεί επίσης μια φόρμα multipart. Το αρχείο μπαίνει στο πεδίο file και ο φάκελος μπορεί να δοθεί ως πεδίο φόρμας folder_id:

Φόρμα multipart · bash
curl -X POST "https://ufoload.com/api/v1/files" \
  -H "Authorization: Bearer $UFOLOAD_API_KEY" \
  -F "file=@holiday-2026.mp4"

Ένα επιτυχημένο ανέβασμα απαντά με 201 και σώμα JSON που περιέχει το αντικείμενο αρχείου. Τα πεδία που θα χρησιμοποιείτε συχνότερα είναι τα id, public_id (ο σύντομος κωδικός που μπαίνει στις διευθύνσεις του player), status, duration_ms και max_quality. Ο διακομιστής δεν χρησιμοποιεί επιπλέον χώρο για περιεχόμενο που ήδη έχει: αν ανεβάσετε ξανά τα ίδια bytes, απαντά με 200 με το υπάρχον αρχείο και "duplicate": true, αντιστοιχίζοντας τα αρχεία με βάση το hash SHA-256.

ΚατάστασηΣημασία
201Το αρχείο έγινε δεκτό και μπήκε σε ουρά για επεξεργασία
200Το ίδιο περιεχόμενο υπάρχει ήδη στη βιβλιοθήκη σας· το duplicate είναι true
401Το κλειδί λείπει ή δεν είναι έγκυρο
404Ο φάκελος προορισμού δεν υπάρχει
409Δεν υπάρχει αρκετός αποθηκευτικός χώρος
413Το αρχείο είναι μεγαλύτερο από όσο επιτρέπει το πρόγραμμά σας
429Πάρα πολλά αιτήματα· περιμένετε και δοκιμάστε ξανά
Συμβουλή

Τα μεγάλα ανεβάσματα δεν υπόκεινται στα σύντομα χρονικά όρια αιτημάτων που ισχύουν για τις συνηθισμένες κλήσεις API. Ο διακομιστής δέχεται το σώμα όσο συνεχίζει να φτάνει, οπότε μια αργή σύνδεση δεν χαλά ένα ανέβασμα πολλών gigabyte, αν και μια υπερβολικά μεγάλη παύση μεταξύ μπλοκ μπορεί και πάλι να διακοπεί από τον reverse proxy.

Περιμένετε να είναι έτοιμο το βίντεο

Το ανέβασμα είναι μόνο το πρώτο μισό. Μετά από αυτό, το αρχείο μπαίνει σε ουρά και κωδικοποιείται σε προσαρμοστική κλίμακα HLS (δείτε πώς χτίζεται η κλίμακα). Το status του περνά από uploading, queued και processing και καταλήγει σε ready ή failed· ένα αποτυχημένο αρχείο φέρει μήνυμα error. Ελέγχετε το αρχείο κάθε λίγα δευτερόλεπτα και ποτέ σε σφιχτό βρόχο: το API έχει όριο αιτημάτων και απαντά με 429.

bash
curl "https://ufoload.com/api/v1/files/FILE_ID" \
  -H "Authorization: Bearer $UFOLOAD_API_KEY"

Η απάντηση έχει δύο μέρη: το file με τα μεταδεδομένα και το links με υπογεγραμμένες διευθύνσεις για την κύρια λίστα αναπαραγωγής (playback), το εξώφυλλο (poster), το sprite προεπισκόπησης με hover (sprite), κάθε εκδοχή και το expires_at. Αν χρειάζεστε διαφορετική διάρκεια ισχύος, το POST /files/{id}/links εκδίδει συνδέσμους που ισχύουν από 60 δευτερόλεπτα έως 30 ημέρες, προαιρετικά δεμένους σε διεύθυνση IP ή σε cookie.

Python

Με τη βιβλιοθήκη requests, όταν περνάτε το ανοιχτό αντικείμενο αρχείου, αυτό μεταδίδεται απευθείας από τον δίσκο, οπότε η μνήμη μένει σταθερή ακόμη και για μεγάλα βίντεο. Η παρακάτω συνάρτηση ανεβάζει το αρχείο και μετά περιμένει το αποτέλεσμα.

python
import os
import time
import urllib.parse

import requests

BASE = "https://ufoload.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['UFOLOAD_API_KEY']}"}


def upload(path, folder_id="root"):
    name = urllib.parse.quote(os.path.basename(path))
    with open(path, "rb") as f:
        r = requests.post(
            f"{BASE}/files",
            params={"folder_id": folder_id},
            data=f,
            headers={**HEADERS, "X-File-Name": name, "Content-Type": "application/octet-stream"},
        )
    r.raise_for_status()
    return r.json()["file"]


def wait_ready(file_id, timeout=3600):
    deadline = time.time() + timeout
    while time.time() < deadline:
        r = requests.get(f"{BASE}/files/{file_id}", headers=HEADERS)
        r.raise_for_status()
        data = r.json()
        status = data["file"]["status"]
        if status == "ready":
            return data
        if status == "failed":
            raise RuntimeError(data["file"].get("error") or "encoding failed")
        time.sleep(5)
    raise TimeoutError("video is still processing")


file = upload("holiday-2026.mp4")
data = wait_ready(file["id"])
print("embed:", f"https://iframe.andromedans.live/e/{file['public_id']}")
print("playlist:", data["links"]["playback"])

Node.js

Το Node.js 18 και νεότερο έχει ενσωματωμένο το fetch, οπότε δεν χρειάζονται εξαρτήσεις. Αυτή η εκδοχή διαβάζει το αρχείο στη μνήμη, κάτι που είναι εντάξει για κλιπ και σύντομα βίντεο· για αρχεία πολλών gigabyte προτιμήστε curl, WebDAV ή FTP, που μεταδίδουν απευθείας από τον δίσκο.

js
import { readFile } from 'node:fs/promises'
import { basename } from 'node:path'
import { setTimeout as sleep } from 'node:timers/promises'

const BASE = 'https://ufoload.com/api/v1'
const headers = { Authorization: `Bearer ${process.env.UFOLOAD_API_KEY}` }

async function upload(path) {
  const res = await fetch(`${BASE}/files?folder_id=root`, {
    method: 'POST',
    headers: { ...headers, 'X-File-Name': encodeURIComponent(basename(path)), 'Content-Type': 'application/octet-stream' },
    body: await readFile(path),
  })
  if (!res.ok) throw new Error(`upload failed: ${res.status}`)
  return (await res.json()).file
}

async function waitReady(id) {
  for (;;) {
    const res = await fetch(`${BASE}/files/${id}`, { headers })
    if (!res.ok) throw new Error(`status check failed: ${res.status}`)
    const data = await res.json()
    if (data.file.status === 'ready') return data
    if (data.file.status === 'failed') throw new Error(data.file.error || 'encoding failed')
    await sleep(5000)
  }
}

const file = await upload('holiday-2026.mp4')
const data = await waitReady(file.id)
console.log('embed:', `https://iframe.andromedans.live/e/${file.public_id}`)
console.log('playlist:', data.links.playback)

Εισαγωγή από URL

Αν το βίντεο βρίσκεται ήδη online σε άμεσο σύνδεσμο, αφήστε τον διακομιστή να το κατεβάσει αντί να το τραβήξετε στον υπολογιστή σας και να το στείλετε ξανά. Η κλήση επιστρέφει αμέσως 202 με μια εργασία εισαγωγής· ο διακομιστής κατεβάζει το αρχείο και έπειτα το βάζει σε ουρά για κωδικοποίηση. Σύνδεσμοι προς εσωτερικά δίκτυα, loopback και εύρη διευθύνσεων υπηρεσιών απορρίπτονται, μπορείτε να έχετε έως δέκα ενεργές εισαγωγές και το GET /files/import δείχνει την πρόοδο.

bash
curl -X POST "https://ufoload.com/api/v1/files/import" \
  -H "Authorization: Bearer $UFOLOAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/video.mp4", "name": "video.mp4"}'

WebDAV και FTP

Για μαζικές μεταφορές και για εργαλεία που δεν μπορούν να καλέσουν API, η ίδια βιβλιοθήκη διατίθεται μέσω WebDAV και FTP. Το όνομα χρήστη είναι το email του λογαριασμού σας και ο κωδικός είναι ένα κλειδί API. Και τα δύο μεταδίδουν απευθείας από τον δίσκο και είναι η πιο ανθεκτική επιλογή για πολύ μεγάλα αρχεία.

WebDAV μέσω HTTPS, θύρα 443 · bash
curl -u "you@example.com:$UFOLOAD_API_KEY" https://ufoload.com/dav/
curl -u "you@example.com:$UFOLOAD_API_KEY" -T holiday-2026.mp4 https://ufoload.com/dav/holiday-2026.mp4
FTP με ρητό TLS, θύρα 21 · bash
curl -u "you@example.com:$UFOLOAD_API_KEY" ftp://ftp.ufoload.com/
curl -u "you@example.com:$UFOLOAD_API_KEY" --ftp-ssl -T holiday-2026.mp4 ftp://ftp.ufoload.com/

Χρησιμοποιείτε τις κρυπτογραφημένες παραλλαγές όποτε τις υποστηρίζει ο client σας, αφού το κλειδί API είναι ο κωδικός πρόσβασης. Κάθε client που μιλά WebDAV ή FTPS, από διαχειριστές αρχείων έως εργαλεία συγχρονισμού, μπορεί να χρησιμοποιήσει τα ίδια στοιχεία. Τα αρχεία που αντιγράφονται με αυτόν τον τρόπο εμφανίζονται στη βιβλιοθήκη σας και κωδικοποιούνται όπως κάθε άλλο ανέβασμα.

Ποιον δρόμο να επιλέξετε

ΔρόμοςΙδανικός γιαΠροσοχή σε
Ανέβασμα μέσω APIΕφαρμογές και backends που ανεβάζουν εκ μέρους χρηστώνΧρήση μνήμης αν ο client διαβάζει πρώτα ολόκληρο το αρχείο
Εισαγωγή από URLΑρχεία που έχουν ήδη δημόσιο άμεσο σύνδεσμοΜόνο άμεσοι σύνδεσμοι http(s)· όριο δέκα ενεργών εισαγωγών
WebDAVΜεγάλα αρχεία, προσάρτηση της βιβλιοθήκης ως δίσκουΧρησιμοποιήστε το email σας και το κλειδί API ως διαπιστευτήρια
FTP / FTPSΥπάρχοντα εργαλεία και scripts, μαζική μεταφοράΧρησιμοποιήστε την επιλογή ρητού TLS

Χρησιμοποιήστε το βίντεο

Μόλις η κατάσταση γίνει ready, η διεύθυνση του player είναι https://iframe.andromedans.live/e/ ακολουθούμενη από το public_id, ακριβώς αυτό που βάζετε σε ένα iframe (λειτουργεί και το μεγάλο id, το οποίο ανακατευθύνεται στη σύντομη διεύθυνση)· ο οδηγός ενσωμάτωσης δείχνει τον κώδικα και την εναλλακτική με hls.js. Μπορείτε να περιορίσετε πού παίζει με κανόνες domain και χωρών και, όταν υπάρχουν διαθέσιμες διαφημίσεις, να τις ενεργοποιήσετε για να κερδίζετε από τις προβολές. Κρατήστε το κλειδί έξω από τον κώδικα του browser, αλλάξτε το όταν κάποιος φεύγει από την ομάδα σας και θυμηθείτε ότι το API διατίθεται σε κάθε πρόγραμμα, οπότε μπορείτε να ξεκινήσετε να χτίζετε σήμερα.

Δοκιμάστε το με δωρεάν λογαριασμό

Ανεβάστε ένα βίντεο και αποκτήστε player HLS και κλειδί API μέσα σε λίγα λεπτά. Τα όρια των προγραμμάτων αναφέρονται στη σελίδα τιμών.