Όταν το 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 proxy του Axios και ένας πράκτορας SOCKS είναι ξεχωριστοί μηχανισμοί. Η εφαρμογή παρέχει το URL, τα χρονικά όρια και την πολιτική ακύρωσης.

Χρησιμοποιήστε μια προσωρινή διαδρομή που ανήκει σε αυτή τη λειτουργία. Αποφασίστε πώς θα χειρίζεστε τις συγκρούσεις πριν δημιουργήσετε το ρεύμα εγγραφής, ώστε ο καθαρισμός μετά από αποτυχία να μην αφαιρέσει αρχείο κάποιου άλλου. Μια σκόπιμη επανάληψη χρειάζεται τη δική της πολιτική.

Το pipeline συντονίζει ανάγνωση και εγγραφή και αναφέρει την αποτυχία τους. Η κλήση του response.data.pipe(file) και η άμεση καταγραφή επιτυχίας παραλείπει αυτό το σημείο ολοκλήρωσης. Διακοπή δικτύου ή γεμάτος δίσκος μπορεί να συμβεί αφού φτάσει έγκυρη απόκριση HTTP· κρατήστε το πλαίσιο της απόκρισης και το σφάλμα που σταμάτησε την επεξεργασία.

Αφού η αναμενόμενη επεξεργασία πετύχει, εκτελέστε τους ελέγχους τεχνουργήματος της εφαρμογής και μετά δημοσιεύστε το τελικό όνομα. Ολοκλήρωση σημαίνει ότι το stream καταναλώθηκε και γράφτηκε με αυτά τα API, όχι ότι είναι η αναμενόμενη έκδοση ή το έγγραφο. Σε αποτυχία ή ακύρωση, διατηρήστε ή αφαιρέστε το μερικό αρχείο σύμφωνα με την επιλεγμένη πολιτική επανάληψης. Ένα σήμα ακύρωσης μπορεί να σταματήσει το σχετικό αίτημα και τις λειτουργίες ροής· δεν αποφασίζει τι πρέπει να κάνει η εφαρμογή με την έξοδο.

Σχετικά άρθρα