Axios একটি স্ট্রিম ফেরত দিয়েছে। ফাইলটি এখনো লেখা হচ্ছে।
Node-এ Axios দিয়ে SOCKS এজেন্টের মাধ্যমে ডাউনলোড করার সময় নেটওয়ার্ক পড়া ও গন্তব্যে লেখা—দুটোরই জন্য অপেক্ষা করুন।
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-গুলোর অধীনে স্ট্রিমটি গ্রহণ ও লেখা হয়েছে, কিন্তু এটি প্রত্যাশিত রিলিজ বা নথি—তা নয়। ব্যর্থতা বা বাতিলকরণে, নির্বাচিত পুনরারম্ভ নীতির অনুযায়ী আংশিক ফাইলটি রাখুন বা সরিয়ে ফেলুন। বাতিলকরণ সংকেত সংশ্লিষ্ট অনুরোধ ও স্ট্রিম অপারেশন বন্ধ করতে পারে; তবে অ্যাপ্লিকেশন আউটপুট নিয়ে কী করবে তা এটি নির্ধারণ করে না।