Axios가 responseType: 'stream' 로 Node 요청을 해결하면 본문은 사용할 준비가 된 상태입니다. 하지만 파일은 아직 완성되지 않았습니다. 목적지로의 전송을 기다리세요:

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 에이전트를 지원해야 합니다. Axios에 내장된 HTTP 프록시 옵션과 SOCKS 에이전트는 별개의 메커니즘입니다. URL, 타임아웃, 취소 정책은 애플리케이션이 제공합니다.

이 작업이 소유한 임시 경로를 사용하세요. 쓰기 스트림을 만들기 전에 충돌 처리 방식을 정하세요. 그래야 실패 후 정리가 다른 사람의 파일을 지우지 않습니다. 의도적인 재개에는 자체 정책이 필요합니다.

pipeline 는 읽기와 쓰기를 조정하고 그 실패를 보고합니다. response.data.pipe(file) 를 호출하고 곧바로 성공을 기록하면 그 완료 지점을 건너뛰게 됩니다. 유효한 HTTP 응답이 도착한 뒤에도 네트워크 중단이나 디스크 가득 참이 일어날 수 있습니다. 응답의 맥락과 처리를 멈춘 오류를 보관하세요.

기다리던 처리가 성공하면 애플리케이션의 산출물 검사를 수행한 뒤 최종 이름을 게시하세요. 완료란 이 API 아래에서 스트림이 소비되고 기록되었다는 뜻이지, 기대한 릴리스나 문서라는 뜻은 아닙니다. 실패나 취소 시에는 선택한 재개 정책에 따라 부분 파일을 보관하거나 삭제하세요. 취소 신호는 해당 요청과 스트림 작업을 멈출 수 있지만, 출력으로 무엇을 할지는 결정하지 않습니다.

관련 글