我正在寻找一种如何使用gRPC实现文件下载功能的方法,但我无法在文档中找到如何完成此操作。
这样做的最佳方式是什么?我想拥有一个保存文件的gRPC服务器和一个gRPC客户端来请求来自gRPC的东西。
我查看了Java中的示例,但无法找到如何执行此操作的方法。我今天刚开始阅读有关gRPC的内容。
答案 0 :(得分:8)
您必须将特定message
定义为数据容器,并且必须使用stream
将其传输到客户端。
proto消息和RPC服务的示例:
message DataChunk {
bytes data = 1;
}
rpc DownloadProductImage(DownloadProductImageRequest) returns(stream DataChunk){}
在java中,您可以使用BufferedInputStream
将资源流式传输到客户端。
Code example服务器端。
Code example客户端。
答案 1 :(得分:1)
有几种可能的方法。
如果您的文件足够小,您可以使用单个字符串字段定义原型文件,并将整个文本内容转储到该字段中。
如果您的文件太大而无法执行此操作,则可能需要对文件进行分块并使用流API按块发送文件块。
以下是gRPC入门的一个很好的指南。
答案 2 :(得分:0)
我从db80中获得了工作示例,并创建了一个带有完整示例的PR:https://github.com/grpc/grpc-java/pull/5126
希望他们将合并此文件,然后每个人都可以拥有这个GRPC通用用例的有效示例。