Quand Axios résout une requête Node avec responseType: 'stream', le corps est prêt à être consommé. Le fichier, lui, n'est pas encore complet. Attendez le transfert vers sa destination :

import { createWriteStream } from 'node:fs';
import { pipeline } from 'node:stream/promises';

const response = await client.get(url, { responseType: 'stream' });
await pipeline(response.data, createWriteStream(partPath));

Ceci utilise un client déjà configuré. Son adaptateur doit prendre en charge le proxy ou l'agent SOCKS choisi ; l'option de proxy HTTP intégrée d'Axios et un agent SOCKS sont des mécanismes distincts. L'application fournit l'URL, les délais d'expiration et la politique d'annulation.

Utilisez un chemin temporaire propre à cette opération. Décidez du traitement des collisions avant de créer le flux d'écriture, afin qu'un nettoyage après échec ne supprime pas le fichier d'autrui. Une reprise volontaire exige sa propre politique.

pipeline coordonne lecture et écriture et signale leur échec. Appeler response.data.pipe(file) et journaliser immédiatement un succès saute ce point d'achèvement. Une coupure réseau ou un disque plein peuvent survenir après l'arrivée d'une réponse HTTP valide ; conservez le contexte de la réponse et l'erreur qui a arrêté le traitement.

Une fois le traitement attendu réussi, effectuez les contrôles d'artefact de l'application, puis publiez le nom final. L'achèvement signifie que le flux a été consommé et écrit avec ces API, non qu'il s'agit de la version ou du document attendu. En cas d'échec ou d'annulation, conservez ou supprimez le fichier partiel selon la politique de reprise choisie. Un signal d'annulation peut arrêter la requête et les opérations de flux concernées ; il ne décide pas de ce que l'application doit faire de la sortie.

Articles similaires