APIUploadWebDAV

Video augšupielāde caur API: curl, Python, Node.js, WebDAV un FTP

Augšupielādējiet un importējiet video ar UFOLOAD REST API, izmantojot curl, Python un Node.js, gaidiet kodēšanu un lieliem failiem lietojiet WebDAV vai FTP.

Video var ievietot UFOLOAD, ne reizi neatverot paneli. REST API pieņem augšupielādes caur HTTPS, serveris var jūsu vietā lejupielādēt failu no saites, un tas pats konts ir pieejams caur WebDAV un FTP rīkiem, kas jau runā šajos protokolos. Šajā rokasgrāmatā aplūkoti visi pieci ceļi ar strādājošām komandām, paskaidrots, ko atbild serveris, un parādīts, kā gaidīt kodēšanas beigas. Tālāk minētie galapunkti pārbaudīti pret publisko OpenAPI specifikāciju; pilns apraksts ir API dokumentācijā.

Izveidojiet API atslēgu

Izveidojiet atslēgu sava paneļa sadaļā Izstrādātājiem. Katrs pieprasījums to nes kā bearer žetonu galvenē Authorization. Atslēga tiek parādīta tikai vienreiz, kad tā izveidota, tāpēc glabājiet to vides mainīgajā vai noslēpumu pārvaldniekā un, ja tā noplūst, atsauciet to panelī. Tā pati atslēga darbojas kā parole WebDAV un FTP, bet lietotājvārds ir jūsu konta e-pasts. Ja jums vēl nav konta, izveidojiet bezmaksas kontu; cenu lapā norādīts faila izmēra limits un krātuves un datplūsmas kvotas, kas attiecas uz jūsu plānu.

bash
export UFOLOAD_API_KEY="ufo_..."

Augšupielāde ar curl

Vienkāršākā augšupielāde sūta failu kā neapstrādātu pieprasījuma ķermeni un ievieto tā nosaukumu galvenē X-File-Name. Ja nosaukumā ir atstarpes vai ne-ASCII rakstzīmes, sūtiet to procentkodētu (UTF-8). Pēc noklusējuma fails nonāk saknes mapē; lai izvēlētos citu, pievienojiet ?folder_id= vai galveni X-Folder-Id.

Neapstrādāts ķermenis · 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

Darbojas arī multipart forma. Fails tiek ievietots laukā file, un mapi var norādīt formas laukā folder_id:

Multipart forma · bash
curl -X POST "https://ufoload.com/api/v1/files" \
  -H "Authorization: Bearer $UFOLOAD_API_KEY" \
  -F "file=@holiday-2026.mp4"

Veiksmīga augšupielāde atbild ar 201 un JSON ķermeni, kurā ir faila objekts. Visbiežāk izmantosiet laukus id, public_id (īsais kods, kas tiek ievietots atskaņotāja adresēs), status, duration_ms un max_quality. Serveris netērē papildu vietu saturam, kas tam jau ir: ja augšupielādējat tos pašus baitus vēlreiz, tas atbild ar 200, esošo failu un "duplicate": true, salīdzinot failus pēc SHA-256 jaucējvērtības.

StatussNozīme
201Fails pieņemts un ievietots apstrādes rindā
200Tāds pats saturs jau ir jūsu bibliotēkā; duplicate ir true
401Atslēgas nav vai tā ir nederīga
404Mērķa mape neeksistē
409Nepietiek krātuves
413Fails ir lielāks, nekā atļauj jūsu plāns
429Pārāk daudz pieprasījumu; pagaidiet un mēģiniet vēlreiz
Padoms

Uz lielām augšupielādēm neattiecas īsās pieprasījumu noildzes, kas piemērojamas parastiem API izsaukumiem. Serveris pieņem ķermeni tik ilgi, kamēr tas turpina pienākt, tāpēc lēns savienojums nesalauž vairāku gigabaitu augšupielādi, lai gan pārāk gara pauze starp blokiem joprojām var tikt pārtraukta reversajā starpniekserverī.

Gaidiet, līdz video ir gatavs

Augšupielāde ir tikai pirmā puse. Pēc tās fails tiek ievietots rindā un kodēts adaptīvās HLS kāpnēs (skatiet kā tiek veidotas kāpnes). Tā status iziet uploading, queued un processing un beidzas ar ready vai failed; neizdevušamies failam ir error ziņojums. Vaicājiet failu ik pēc dažām sekundēm un nekad ciešā ciklā: API ir pieprasījumu limits, un tas atbild ar 429.

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

Atbildei ir divas daļas: file ar metadatiem un links ar parakstītām adresēm galvenajam atskaņošanas sarakstam (playback), vākam (poster), priekšskatījuma sprītam (sprite), katrai versijai un expires_at. Ja vajag citu derīguma termiņu, POST /files/{id}/links izsniedz saites, kas derīgas no 60 sekundēm līdz 30 dienām, pēc izvēles piesaistītas IP adresei vai sīkdatnei.

Python

Ar bibliotēku requests, nododot atvērtu faila objektu, fails tiek straumēts no diska, tāpēc atmiņas patēriņš paliek nemainīgs arī lieliem video. Zemāk esošā funkcija augšupielādē un pēc tam gaida rezultātu.

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 un jaunākās versijās fetch ir iebūvēts, tāpēc atkarības nav vajadzīgas. Šī versija nolasa failu atmiņā, kas ir pieņemami klipiem un īsiem video; vairāku gigabaitu failiem labāk izmantot curl, WebDAV vai FTP, kas straumē no diska.

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)

Imports pēc URL

Ja video jau ir tiešsaistē pieejams pēc tiešas saites, ļaujiet serverim to lejupielādēt, nevis velciet to uz savu datoru un sūtiet atkal augšā. Izsaukums uzreiz atgriež 202 ar importa uzdevumu; serveris lejupielādē failu un pēc tam ievieto to kodēšanas rindā. Saites uz iekšējiem tīkliem, loopback un servisa adrešu diapazoniem tiek noraidītas, vienlaikus var būt līdz desmit aktīviem importiem, un GET /files/import rāda progresu.

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 un FTP

Masveida pārsūtīšanai un rīkiem, kas nevar izsaukt API, tā pati bibliotēka ir pieejama caur WebDAV un FTP. Lietotājvārds ir jūsu konta e-pasts, bet parole – API atslēga. Abi straumē no diska un ir uzticamākā iespēja ļoti lieliem failiem.

WebDAV caur HTTPS, ports 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 ar tiešu TLS, ports 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/

Kad vien klients to atbalsta, izmantojiet šifrētos variantus, jo API atslēga ir parole. Tos pašus datus var izmantot jebkurš klients, kas runā WebDAV vai FTPS, no failu pārvaldniekiem līdz sinhronizācijas rīkiem. Šādi nokopētie faili parādās jūsu bibliotēkā un tiek kodēti tāpat kā jebkura cita augšupielāde.

Kuru ceļu izvēlēties

CeļšVislabāk piemērotsKam pievērst uzmanību
Augšupielāde caur APILietotnēm un aizmugursistēmām, kas augšupielādē lietotāju vārdāAtmiņas patēriņš, ja klients vispirms nolasa visu failu
Imports pēc URLFailiem, kuriem jau ir publiska tiešā saiteTikai tiešas http(s) saites; ne vairāk kā desmit aktīvi importi
WebDAVLieli faili, bibliotēkas pievienošana kā disksKā pieteikšanās datus izmantojiet e-pastu un API atslēgu
FTP / FTPSEsoši rīki un skripti, masveida pārsūtīšanaIzmantojiet tiešā TLS iespēju

Video izmantošana

Kad statuss ir ready, atskaņotāja adrese ir https://iframe.andromedans.live/e/, kam seko public_id – tieši to ievietojat iframe (darbojas arī garais id, kas tiek pāradresēts uz īso adresi); iegulšanas rokasgrāmatā parādīts marķējums un hls.js alternatīva. Varat ierobežot, kur video tiek atskaņots, ar domēnu un valstu noteikumiem, un, ja reklāmas ir pieejamas, ieslēgt tās, lai pelnītu ar skatījumiem. Neturiet atslēgu pārlūka kodā, nomainiet to, kad cilvēki pamet jūsu komandu, un atcerieties, ka API ir pieejams visos plānos, tāpēc varat sākt veidot jau šodien.

Izmēģiniet ar bezmaksas kontu

Augšupielādējiet video un dažās minūtēs saņemiet HLS atskaņotāju un API atslēgu. Plānu limiti norādīti cenu lapā.