Golang gRPC stream XML file (server-side)

Viewed 510

The goal: When I open localhost:9000/xml page in the browser I would like to see xml content (which is large). I use gRPC server with grpc-gateway as a proxy.

To send my xml file I use server-side stream and send google.api.HttpBody message with text/xml content-type. Below is a part of my server code for streaming xml:

reader := bytes.NewReader(data) // "data" is a large xml file
buffer := make([]byte, 1024)

for {
    n, err := reader.Read(buffer)
    if err == io.EOF {
        break
    }
    if err != nil {
        return status.Error(codes.Internal, "")
    }

    if err := stream.Send(&httpbody.HttpBody{
        ContentType: "text/xml",
        Data:        buffer[:n],
    }); err != nil {
        return status.Error(codes.Internal, "")
    }
}

Unfortunately when I open localhost:9000/xml in the browser I see that my xml response is broken. Every 1025 byte starts on a new line, for example:

...
...
<loc>https://example.com/books/1</l
        oc>
...
...

How can I stream a large xml content and not break it?

0 Answers
Related