To answer my own question the entire data array should be encoded at once with the header together as one base64 string.
The header should not include it’s own size.
<VTKFile type="PolyData" version="1.0" byte_order="BigEndian" >
<PolyData>
<Piece NumberOfPoints="27" NumberOfVerts="0" NumberOfLines="0" NumberOfStrips="0" NumberOfPolys="0">
<Points>
<DataArray type="Float64" NumberOfComponents="3" Name="Points" format="binary">AAAUQD/wAAAAAAAAP/AAAAAAAAA/8AAAAAAAAD/wAAAAAAAAP/AAAAAAAABAAAAAAAAAAD/wAAAAAAAAQAAAAAAAAAA/8AAAAAAAAEAAAAAAAAAAP/AAAAAAAAA/8AAAAAAAAD/wAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAP/AAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAA/8AAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAD/wAAAAAAAAP/AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAD/wAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA/8AAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</DataArray>
</Points>
</Piece>
</PolyData>
</VTKFile>
^ the working equivilant of what I was trying.