Если процесс долгий (больше ~30 секунд) - то только так и надо.
Если не такой уж долгий, то можно и как ты сейчас пытаешься.
По современному: так
https://developer.mozilla.org/en-US/...adable_streams
По классике: XMLHttpRequest onreadystatechange по readyState === XMLHttpRequest.LOADING читаешь .resposeText.
Ну и можно не слать какие-то конкретные значения, а просто имитировать загрузку(отправляя заранее заданное нужное кол-во байт) и слушать событие progress.