S zkoušel jsi soubor číst jako stream, a ten rourovat do websocketu? Nad streamem si uložíš reader, který ti poskytne callbackované informace o tom kolik toho přenesl, takže si jen na začátku vyčteš ze souboru jeho původní velikost, a pak si do další globálky v callbacku přičítáš kolik již bylo přeneseno, takže pak spočítáš procentuální progress
Sice to na pozadí funguje dost podobně jako to slicování, ale ne úplně. Nevím jakým způsobem to zmíněné "slicování a posílání nefunguje", takže nedovedu říct, jestli tohle je pro tebe cesta, nebo ne.