目标:当我localhost:9000/xml
在浏览器中打开页面时,我希望看到 xml 内容(很大)。我使用带有grpc-gateway的 gRPC 服务器作为代理。
要发送我的 xml 文件,我使用服务器端流并发送google.api.HttpBody
带有text/xml
内容类型的消息。以下是我用于流式传输 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, "")
}
}
不幸的是,当我localhost:9000/xml
在浏览器中打开时,我看到我的 xml 响应已损坏。每 1025 个字节从一个新行开始,例如:
...
...
<loc>https://example.com/books/1</l
oc>
...
...
如何流式传输大型 xml 内容而不破坏它?