Когато Axios разреши Node заявка с responseType: 'stream', тялото е готово за консумация. Файлът обаче още не е завършен. Изчакайте прехвърлянето към местоназначението:

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));

Това използва вече конфигуриран клиент. Неговият адаптер трябва да поддържа избрания прокси или SOCKS агент; вградената HTTP прокси опция на Axios и SOCKS агентът са отделни механизми. Приложението задава URL, таймаутите и политиката за отказ.

Използвайте временен път, който принадлежи на тази операция. Решете как да се справяте с колизиите, преди да създадете потока за запис, така че почистването след неуспех да не изтрие чужд файл. Умишленото продължаване изисква собствена политика.

pipeline координира четенето и записването и докладва за техния неуспех. Извикването на response.data.pipe(file) и незабавното логване на успех пропуска тази точка на завършване. Прекъсване на мрежата или запълнен диск могат да настъпят след пристигането на валиден HTTP отговор; запазете контекста на отговора и грешката, която е спряла потока.

След като изчаканият поток успее, изпълнете проверките на артефакта на приложението и след това публикувайте окончателното име. Завършването означава, че потокът е консумиран и записан чрез тези API, а не че това е очакваното издание или документ. При неуспех или отказ запазете или премахнете частичния файл според избраната политика за продължаване. Сигнал за отказ може да спре съответната заявка и операциите по потока; той не решава какво да прави приложението с изхода.

Подобни статии