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.
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.
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.mp4Darbojas arī multipart forma. Fails tiek ievietots laukā file, un mapi var norādīt formas laukā folder_id:
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.
| Statuss | Nozīme |
|---|---|
201 | Fails pieņemts un ievietots apstrādes rindā |
200 | Tāds pats saturs jau ir jūsu bibliotēkā; duplicate ir true |
401 | Atslēgas nav vai tā ir nederīga |
404 | Mērķa mape neeksistē |
409 | Nepietiek krātuves |
413 | Fails ir lielāks, nekā atļauj jūsu plāns |
429 | Pārāk daudz pieprasījumu; pagaidiet un mēģiniet vēlreiz |
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.
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.
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.
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.
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.
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.mp4curl -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ērots | Kam pievērst uzmanību |
|---|---|---|
| Augšupielāde caur API | Lietotnē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 URL | Failiem, kuriem jau ir publiska tiešā saite | Tikai tiešas http(s) saites; ne vairāk kā desmit aktīvi importi |
| WebDAV | Lieli faili, bibliotēkas pievienošana kā disks | Kā pieteikšanās datus izmantojiet e-pastu un API atslēgu |
| FTP / FTPS | Esoši rīki un skripti, masveida pārsūtīšana | Izmantojiet 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.
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ā.