Aller au contenu principal

Envoyer avec le SDK

Envoyez des fichiers, même de grosses vidéos, sur Videas avec les SDK officiels — un seul appel gère la session reprenable, le découpage et la progression.

Les SDK officiels transforment tout le flux d’envoi reprenable en un seul appel : uploadFile (JavaScript) / upload_file (Python). Ils créent la session, découpent le fichier en chunks, les transfèrent dans l’ordre et rapportent la progression — donc les grosses vidéos passent toutes seules.

L’appel unique

JavaScript / TypeScript (@videas/sdk)

import { createVideasClient } from '@videas/sdk'

const videas = createVideasClient({ apiKey: process.env.VIDEAS_API_KEY! })

const created = await videas.upload.uploadFile({
  workspaceUid: 'ws_123',
  filename: 'cours.mp4',
  data: bytes,               // un Blob/File, un ArrayBuffer ou un tableau typé
  contentType: 'video/mp4',  // optionnel
})
console.log('Nouvel asset :', created.asset_uid)

Python (videas-sdk)

from videas_sdk import VideasClient

client = VideasClient(api_key="sk_votre_cle_ici")

with open("cours.mp4", "rb") as fh:
    created = client.upload.upload_file(
        workspace_uid="ws_123",
        filename="cours.mp4",
        data=fh.read(),
        content_type="video/mp4",
    )
print("Nouvel asset :", created["asset_uid"])

Champs optionnels : assetName / asset_name, description, et parentFolderUid / parent_folder_uid (envoyer dans un dossier plutôt qu’à la racine du workspace).

Gros fichiers & progression

Le transfert est découpé automatiquement — 32 Mio par requête par défaut, bien sous la limite serveur de 50 Mio par chunk — donc les fichiers de plusieurs gigaoctets s’envoient sans effort. Ajustez la taille de chunk et suivez la progression :

await videas.upload.uploadFile({
  workspaceUid: 'ws_123',
  filename: 'film.mp4',
  data: bytes,
  chunkSize: 16 * 1024 * 1024, // optionnel — 32 Mio par défaut, doit rester ≤ 50 Mio
  onProgress: (sent, total) => console.log(`${Math.round((sent / total) * 100)} %`),
})
client.upload.upload_file(
    workspace_uid="ws_123",
    filename="film.mp4",
    data=data,
    chunk_size=16 * 1024 * 1024,  # optionnel — 32 Mio par défaut, doit rester <= 50 Mio
    on_progress=lambda sent, total: print(f"{round(sent / total * 100)} %"),
)

Depuis le navigateur

uploadFile a besoin de votre clé secrète sk_ : exécutez-le sur votre serveur — n’envoyez jamais la clé au navigateur. Pour un upload navigateur, faites créer la session par votre serveur et laissez le navigateur envoyer les octets vers l’URL-capacité renvoyée (sans clé) : voir Uploads reprenables avec un client TUS.

Depuis un serveur (Node)

import { readFile } from 'node:fs/promises'
const bytes = await readFile('film.mp4')
await videas.upload.uploadFile({ workspaceUid: 'ws_123', filename: 'film.mp4', data: bytes })

Attendre que l’asset soit prêt

uploadFile renvoie les métadonnées créées (dont asset_uid) immédiatement — la vidéo est ensuite traitée de façon asynchrone. Interrogez l’asset jusqu’à ce qu’il soit prêt avant de le lire ou l’intégrer :

let asset = await videas.assets.get(created.asset_uid!)
while (asset.status !== 'ready' && asset.status !== 'error') {
  await new Promise((r) => setTimeout(r, 3000))
  asset = await videas.assets.get(created.asset_uid!)
}

Gestion des erreurs

Tout échec lève une erreur typée VideasApiError (JS) / VideasAPIError (Python) portant le status HTTP, le code et le body. Si vous réglez chunkSize au-dessus de la limite serveur, vous obtiendrez un message clair « chunk too large » qui nomme la limite de 50 Mio par chunk — réduisez la taille de chunk (ou omettez-la pour utiliser la valeur par défaut).

Limitations

  • Pas encore de reprise entre appels. L’envoi est découpé, mais un appel interrompu repart du premier chunk ; reprendre une session partiellement envoyée n’est pas encore exposé. Pour une logique de reprise sur mesure, pilotez le transfert avec un client TUS — voir Envoyer avec l’API REST.

Étapes suivantes