Téléchargement des fichiers d'entrée
Une fois les fichiers d’entrée téléversés et finalisés, vous pouvez les télécharger à nouveau via l’API.
Ce guide suppose que vous avez un bundle avec des fichiers d’entrée finalisés et que vous disposez du scope read:bundle.
Fonctionnement
Section intitulée « Fonctionnement »Le point de terminaison de téléchargement retourne des URL signées prêtes à l’emploi. Téléchargez les octets des fichiers directement depuis le CDN/S3 avec un GET sans en-tête Authorization, selon le même modèle que les téléchargements de fichiers de scan.
sequenceDiagram
participant Client as Client RCAPI
participant RCAPI as RCAPI
participant CDN as CDN / S3
Client->>RCAPI: GET input-files (page, limit)
RCAPI-->>Client: items avec urls signées + total
loop pour chaque item
Client->>CDN: GET url
CDN-->>Client: octets du fichier
end
RCAPI signe le préfixe d’entrée du bundle une fois par requête. L’url de chaque item est cette signature avec un wildcard remplacé par le chemin de stockage du fichier, donc toutes les URL d’une même réponse partagent la même expiration.
Point de terminaison
Section intitulée « Point de terminaison »| Méthode | Chemin | Scope | Objectif |
|---|---|---|---|
GET | /v1/bundles/{bundleId}/input-files | read:bundle | Lister les URL de téléchargement signées des fichiers d’entrée finalisés |
Lister les URL de téléchargement des fichiers d’entrée
Section intitulée « Lister les URL de téléchargement des fichiers d’entrée »GET {api_url}/v1/bundles/{bundleId}/input-files?page=1&limit=20Authorization: Bearer {access_token}Paramètres de requête
Section intitulée « Paramètres de requête »| Paramètre | Type | Description |
|---|---|---|
page | number | Index de page basé sur 1 (défaut 1) |
limit | number | Taille de page (défaut 20, maximum 20) |
sessionId | uuid | Facultatif. Limite les résultats aux fichiers d’une session de téléversement |
Aucun tri n’est proposé. Les fichiers sont retournés dans un ordre de stockage stable.
Une liste paginée ({ items, total }) :
{ "items": [ { "fileName": "scan.las", "url": "https://cdn…/bundles/…/scan.las?X-Amz-…", "sessionId": "6ebf0fe5-4428-4b26-a7e4-e3274980123b" }, { "fileName": "panorama/2024-07-scan-idx40.jpg", "url": "https://cdn…/bundles/…/panorama/2024-07-scan-idx40.jpg?X-Amz-…", "sessionId": "6ebf0fe5-4428-4b26-a7e4-e3274980123b" } ], "total": 28}| Champ | Signification |
|---|---|
fileName | Nom du fichier d’entrée (le chemin substitué dans le préfixe signé) |
url | URL de téléchargement signée, prête pour un GET sans en-tête d’authentification |
sessionId | Session de téléversement à laquelle le fichier appartient |
total | Nombre total de fichiers d’entrée finalisés sur toutes les pages |
Télécharger les octets
Section intitulée « Télécharger les octets »Pour chaque item, effectuez un GET directement sur l’url. Aucun jeton bearer n’est requis ; la signature est intégrée dans la chaîne de requête.
import requests
response = requests.get(item["url"])response.raise_for_status()
with open(local_path, "wb") as handle: handle.write(response.content)URL expirées
Section intitulée « URL expirées »Toutes les URL d’une réponse partagent une seule expiration de signature (environ 24 heures, cohérent avec les autres liens signés de l’API). Si un téléchargement retourne 403 Forbidden, l’URL a expiré. Demandez une nouvelle page depuis le point de terminaison de liste et réessayez.
Pagination des bundles volumineux
Section intitulée « Pagination des bundles volumineux »Lorsque total dépasse limit, parcourez les résultats page par page :
import requests
API_URL = "https://<your-regional-api-url>"TOKEN = "<access_token>"BUNDLE_ID = "<bundleId>"LIMIT = 20
headers = {"Authorization": f"Bearer {TOKEN}"}base = f"{API_URL}/v1/bundles/{BUNDLE_ID}/input-files"
page = 1while True: listing = requests.get( base, headers=headers, params={"page": page, "limit": LIMIT} ).json()
for item in listing["items"]: local_name = item["fileName"].replace("/", "_") data = requests.get(item["url"]) data.raise_for_status() with open(local_name, "wb") as handle: handle.write(data.content) print(f"Downloaded {item['fileName']}")
if page * LIMIT >= listing["total"]: break page += 1Quand utiliser ce point de terminaison
Section intitulée « Quand utiliser ce point de terminaison »| Cas d’utilisation | Notes |
|---|---|
| Archivage | Copier les captures brutes dans votre propre stockage après le téléversement |
| Retraitement | Télécharger les entrées localement, puis les téléverser dans un nouveau bundle |
| Audit / vérification | Confirmer quels fichiers ont atteint le bundle avant le traitement |
| Tests d’intégration | Boucle complète téléversement et téléchargement dans des pipelines CI |
Ce point de terminaison retourne uniquement les fichiers d’entrée (ce que vous avez téléversé). Les sorties traitées (HLODs, nuages de points standardisés, etc.) sont exposées comme liens signés des composants du bundle sur GET /v1/site/{siteId}/bundles/{bundleId}. Consultez Récupération des sorties traitées.
Cas d’erreur
Section intitulée « Cas d’erreur »| Statut | Cause |
|---|---|
403 Forbidden | Scope read:bundle manquant ou aucune permission de lecture sur le bundle |
404 Not Found | bundleId inconnu |
Un tableau items vide avec total: 0 signifie que le bundle n’a pas encore de fichiers d’entrée finalisés. Complétez d’abord une session de téléversement ; consultez Téléversement de données dans un Data Bundle.