Khi Axios giải quyết một yêu cầu Node với responseType: 'stream', phần thân đã sẵn sàng để dùng. Nhưng tệp thì chưa hoàn tất. Hãy chờ quá trình chuyển vào đích của nó:

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

Đoạn này dùng một ứng dụng khách đã được cấu hình sẵn. Bộ chuyển đổi của nó phải hỗ trợ proxy hoặc tác nhân SOCKS đã chọn; tùy chọn proxy HTTP tích hợp của Axios và một tác nhân SOCKS là hai cơ chế riêng biệt. Ứng dụng cung cấp URL, thời gian chờ và chính sách hủy.

Dùng một đường dẫn tạm thuộc về thao tác này. Hãy quyết định cách xử lý xung đột trước khi tạo luồng ghi, để việc dọn dẹp sau thất bại không xóa tệp của người khác. Việc tiếp tục có chủ đích cần chính sách riêng.

pipeline phối hợp việc đọc và ghi đồng thời báo cáo lỗi của chúng. Gọi response.data.pipe(file) rồi ghi nhận thành công ngay sẽ bỏ qua điểm hoàn tất đó. Mất kết nối mạng hoặc đầy đĩa có thể xảy ra sau khi một phản hồi HTTP hợp lệ đã đến; hãy giữ ngữ cảnh của phản hồi và lỗi đã dừng quá trình xử lý.

Sau khi quá trình xử lý mong đợi thành công, hãy thực hiện các kiểm tra tạo tác của ứng dụng rồi công bố tên cuối cùng. Hoàn tất nghĩa là luồng đã được tiêu thụ và ghi theo các API này, không phải rằng đó là bản phát hành hay tài liệu mong đợi. Khi thất bại hoặc bị hủy, hãy giữ hoặc xóa tệp một phần theo chính sách tiếp tục đã chọn. Tín hiệu hủy có thể dừng yêu cầu và các thao tác luồng liên quan; nó không quyết định ứng dụng phải làm gì với đầu ra.

Bài viết liên quan