如何使用grpcurl使用客户端流媒体GRPC分块上传图片 [英] How to upload an image in chunks with client-side streaming gRPC using grpcurl

查看:68
本文介绍了如何使用grpcurl使用客户端流媒体GRPC分块上传图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

grpcurl-proto Image_service.proto-v-d@-明文本地主机:3010 Imageservice.ImageService.UploadImage<;out

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;
}

推荐答案

有趣的问题。我还没有尝试使用grpcurl发送消息。

文档没有说明如何执行此操作,但this问题说明了如何使用stdin进行流处理。

我建议您先尝试这种方法,以确保对您有效。

如果是,则将各种邮件捆绑到一个文件(out)中也应该有效。

您的后续问题表明您的操作不正确。

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

  • 您的第一条消息应该是{ "info": "...." },后续消息将是{ "chunk_data": "<base64-encoded chunk>" }直到EOF。

这篇关于如何使用grpcurl使用客户端流媒体GRPC分块上传图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆