Как сделать, чтобы огромный файл последовательно считывался и отправлялся post запросом? Node.JS FS Axios

Я пытаюсь отправлять большие видео размером 2-10ГБ post запросом через Axios. Чтобы считать файл, я использую fs.createReadStream с параметром highWaterMark: 10 * 1024 * 1024 (10мбайт), но проблема в том, что оперативная память забивается и далее axios выдаёт ошибку отправки. Как сделать, чтобы файл считывался последовательно, не забиваясь полностью в оперативку? Вот мой код:

async function uploadVideo(fileName) {
    console.log(`Идет выгрузка видео: ${newTitleOfVideo} на сервера ВК...`);
    //Засовываем название и описание видео в API
    let par = {
        name: newTitleOfVideo,
        description: desc,
    }
    //URL для запроса URL выгрузки
    let url = `https://api.vk.com/method/video.save?access_token=${accessToken}&v=5.199&group_id=${id}&wallpost=1&privacy_view=0&privacy_comment=0&compression=0`;

    //Запрашиваем URL для выпуска видео и загружаем видео
    axios.get(url, { params: par })
    .then(({ data }) => {
        let uploadURL = data.response['upload_url'];
        uploadURL = uploadURL.replace('https://', 'http://');
        vkVidId = data.response['video_id'];

        const form = new FormData();
        const fileStream = fs.createReadStream(fileName, {highWaterMark: 10 * 1024 * 1024});
        
        form.append('video_file', fileStream, {
            filename: 'file.mp4',
            contentType: 'video/mp4',
        });

        // Используем getLength() для получения длины содержимого
        form.getLength((err, length) => {
            if (err) {
                return console.log('Код ошибки 001. Ошибка отправки видео. Свяжитесь с @te4ers по ТГ или напишите в техподдержку в паблике ВК');
            }
            async function upload () {
                if (uploadAtt < 10) {
                    axios.post(uploadURL, form, {
                        headers: {
                            ...form.getHeaders(),
                            'Content-Length': fs.statSync(fileName).size,
                        },
                        maxContentLength: Infinity,
                        maxBodyLength: Infinity,
                    })
                    .then(() => {
                        fs.appendFileSync(uploadedPath, title);
                        console.log(`Видео ${newTitleOfVideo} успешно загружено!`);
                        title = "";
                        newTitleOfVideo = "";
                        fs.unlinkSync(fileName);
                        uploadAtt = 1;
                        let commUrl = `https://api.vk.com/method/video.createComment?access_token=${accessToken}&v=5.199&video_id=${vkVidId}&from_group=1&owner_id=-${id}&message=${comm}`;
                        axios.get(commUrl)
                        .then(() => {
                            showCount--;
                            console.log('Комментарий успешно оставлен');
                            counter++;
                            exec();
                            console.log(`Сейчас в очереди: ${showCount} видео`);
                        })
                        .catch((err) => {
                            console.log('Код ошибки 009. Неудалось оставить комментарий. Свяжитесь с @te4ers по ТГ или напишите в техподдержку в паблике ВК');
                        });
                    })
                    .catch((err) => {
                        uploadAtt++;
                        upload();
                        console.log(`Код ошибки 002. Попытка выгрузить видео номер ${uploadAtt}`);
                        return;
                    });
                }
                else {
                    console.log('Код ошибки 002. Неудалось выгрузить видео на сервера VK, достигнуто максимальное кол-во попыток. Начнётся загрузка следующего видео. Свяжитесь с @te4ers по ТГ или напишите в техподдержку в паблике ВК');
                    counter++;
                    showCount--;
                    exec();
                }
            }
            upload();
        });
    })
    .catch((err) => {
        console.log('Код ошибки 003, неверный токен VK или ID паблика, обновите с помощью: изменить_данные.bat', err);
        return;
    });
}

Ответы (0 шт):