https://learn.javascript.ru/xhr-onprogress
Или отправлять одним запросом и отслеживать прогресс сразу всех, или отправлять отдельный запрос на каждый файл, и отслеживать прогресс по каждому отдельно
Вадим Алиев, у http запроса есть тело, это просто по сути набор байт, что именно и как туда было сериализованно на момент отправки неизвестно, сколько там было файлов, или была просто строка с json, у него в заголовках есть размер этого тела и браузер может показывать прогресс сколько байт из этого тела отправлено, поэтому, если нужен прогресс по каждому файлу, надо делать отдельные запросы, чтоб телом каждого запроса был отдельный файл
Вадим Алиев, делать отдельный запрос на каждый файл лучше, так как если отвалится один запрос из 20, остальные 19 загрузятся, а в случае одного запроса ждать дольше, и при отвале не загрузятся все, так как сервер не начнет обрабатывать запрос, пока не загрузит все тело