Axios ha restituito uno stream. Il file è ancora in scrittura.
Attendete sia la lettura dalla rete sia la scrittura nella destinazione quando scaricate tramite un agente SOCKS con Axios in Node.
Quando Axios risolve una richiesta Node con responseType: 'stream', il corpo è pronto per essere consumato. Il file però non è ancora completo. Attendete il trasferimento verso la sua destinazione:
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));Questo usa un client già configurato. Il suo adattatore deve supportare il proxy o l'agente SOCKS scelto; l'opzione proxy HTTP integrata di Axios e un agente SOCKS sono meccanismi separati. L'applicazione fornisce l'URL, i timeout e la politica di annullamento.
Usate un percorso temporaneo di proprietà di questa operazione. Decidete come gestire le collisioni prima di creare lo stream di scrittura, così che la pulizia dopo un errore non rimuova il file di qualcun altro. Una ripresa intenzionale richiede una politica propria.
pipeline coordina lettura e scrittura e segnala il loro fallimento. Chiamare response.data.pipe(file) e registrare subito il successo salta quel punto di completamento. Un'interruzione di rete o un disco pieno possono verificarsi dopo che è arrivata una risposta HTTP valida; conservate il contesto della risposta e l'errore che ha fermato l'elaborazione.
Dopo che l'elaborazione attesa è riuscita, eseguite i controlli dell'artefatto dell'applicazione e poi pubblicate il nome finale. Completare significa che lo stream è stato consumato e scritto con queste API, non che sia la versione o il documento attesi. In caso di errore o annullamento, conservate o rimuovete il file parziale secondo la politica di ripresa scelta. Un segnale di annullamento può fermare la richiesta e le operazioni di flusso interessate; non decide cosa debba fare l'applicazione con l'output.