เมื่อ 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 agent ที่เลือก ตัวเลือก HTTP proxy ที่มีใน Axios และ SOCKS agent เป็นกลไกที่แยกจากกัน แอปพลิเคชันเป็นผู้กำหนด URL เวลาหมดอายุ และนโยบายการยกเลิก

ใช้เส้นทางชั่วคราวที่เป็นของการดำเนินการนี้ ตัดสินวิธีจัดการการชนกันก่อนสร้างสตรีมการเขียน เพื่อให้การล้างข้อมูลหลังล้มเหลวไม่ลบไฟล์ของผู้อื่น การกลับมาทำต่อโดยเจตนาต้องมีนโยบายของตัวเอง

pipeline ประสานการอ่านและการเขียนและรายงานความล้มเหลวของทั้งสอง การเรียก response.data.pipe(file) แล้วบันทึกความสำเร็จทันทีจะข้ามจุดสิ้นสุดนั้น การเชื่อมต่อขาดหรือดิสก์เต็มอาจเกิดขึ้นหลังได้รับคำตอบ HTTP ที่ถูกต้องแล้ว เก็บบริบทของคำตอบและข้อผิดพลาดที่ทำให้การประมวลผลหยุด

หลังการประมวลผลที่รออยู่สำเร็จ ให้ทำการตรวจสอบอาร์ติแฟกต์ของแอปพลิเคชันแล้วจึงเผยแพร่ชื่อสุดท้าย การเสร็จสมบูรณ์หมายความว่าสตรีมถูกใช้และเขียนภายใต้ API เหล่านี้ ไม่ได้หมายความว่าเป็นรีลีสหรือเอกสารที่คาดไว้ เมื่อล้มเหลวหรือยกเลิก ให้เก็บหรือลบไฟล์บางส่วนตามนโยบายการทำต่อที่เลือก สัญญาณยกเลิกสามารถหยุดคำขอและการทำงานของสตรีมที่เกี่ยวข้องได้ แต่ไม่ได้ตัดสินว่าแอปพลิเคชันควรทำอะไรกับผลลัพธ์

บทความที่เกี่ยวข้อง