微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 grpcurl 使用客户端流式 gRPC 分块上传图像

如何解决如何使用 grpcurl 使用客户端流式 gRPC 分块上传图像

我一直在尝试使用 grpcurl 通过客户端流式传输分块上传图像。除了在服务器端接收到的图像数据为 0 字节外,服务正常运行。
我使用的命令是:

grpcurl -proto image_service.proto -v -d @ -plaintext localhost:3010 imageservice.ImageService.UploadImage

This link 提到块数据应该是 base64 编码,所以我的 out 文件内容是:

{"chunk_data": "<base64 encoded image data>"}

This 正是我想要实现的目标,但使用了 grpcurl
请告诉我的命令有什么问题,以及通过 grpcurl 实现流式传输的最佳方法是什么。
我还有两个问题:

  1. gRPC 是否处理将数据拆分成块的问题?
  2. 如何先发送元数据块(ImageInfo 类型),然后通过 grpcurl 发送实际图像数据?

这是我的原型文件

Syntax = "proto3";
package imageservice;
import "google/protobuf/wrappers.proto";
option go_package = "...";

service ImageService {

  rpc UploadImage(stream UploadImageRequest) returns (UploadImageResponse) {}

}

message UploadImageRequest {
  oneof data {
    ImageInfo info = 1;
    bytes chunk_data = 3;
  };
}

message ImageInfo {
  string unique_id = 1;
  string image_type = 2;
}

message UploadImageResponse {
  string url = 1;
}

解决方法

有趣的问题。我还没有尝试过使用(优秀的)webpack.mix.js 流式传输消息。

文档没有解释如何执行此操作,但 this 问题显示了如何使用 stdin 进行流式传输。

我建议您先尝试这种方式,以确保它适合您。

如果是这样,那么将各种消息捆绑到一个文件 (quotient = int (input('State the quotient of',str(first),'divided by',str(second)) ) 中也应该可行。

您的后续问题表明您做错了。

  • grpcurl 将文件分割成块的结果;即这些 base64 编码的字符串中的每一个都应该是整个图像文件的子集(即一个块)。

  • 您的第一条消息应该是 out,后续消息将是 chunk_data,直到 EOF。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。