程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何通过 http 将 .zip 文件下载到 grpc 转码端点?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何通过 http 将 .zip 文件下载到 grpc 转码端点??

开发过程中遇到如何通过 http 将 .zip 文件下载到 grpc 转码端点?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何通过 http 将 .zip 文件下载到 grpc 转码端点?的解决方法建议,希望对你解决如何通过 http 将 .zip 文件下载到 grpc 转码端点?有所启发或帮助;

我有如下定义的 grpc 端点。 grpc 端点返回一个 .zip 文件。它通过 grpc 通道运行正常,但我在通过 REST 端点下载它时遇到问题

使用 ENvoy 进行 http 转码。

我现在在 REST 端点上的问题是,下载响应标头始终设置为 application/Json 而不是 application/zip,以便 zip 下载正常工作。

知道如何指示 Envoy 在转码期间设置正确的标头,以便 REST 下载正常工作吗?

  // Download build
  //
  // Download build
  rpc DownloadBuild(Downloadbuildrequest) returns (stream DownloadResponsE) {
    option (Google.API.http) = {
      get : "/v4/projects/{projectID}/types/{BuildTypE}/builds/{BuildVersion}/.download"
      headers: {}
    };
    option (grpc.gateway.protoc_gen_swagger.options.openAPIv2_operation) = {
      description: "Download build.";
      sumMary: "Download build.";
      Tags: "Builds";
      produces: "application/zip";
      responses: {
        key: "200"
        value: {
          description: "Download build";
        }
      }
      responses: {
        key: "401"
        value: {
          description: "request Could not be authorized";
        }
      }
      responses: {
        key: "404"
        value: {
          description: "Build not found";
        }
      }
      responses: {
        key: "500"
        value: {
          description: "Internal server error";
        }
      }
    };
  }

解决方法

好的,我已经找到了部分解决我的问题的方法。基本上我将不得不使用 google.api.httpBody 作为响应并在那里设置内容类型。 https://github.com/googleapis/googleapis/blob/master/google/api/httpbody.proto

https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/grpc_json_transcoder_filter#sending-arbitrary-content

我在设置下载的文件名和扩展名时仍然有问题。

,

为了设置文件名头,我必须定义一个服务器拦截器,类似于这里提到的:

How to pass data from grpc rpc call to server interceptor in java

  private class TrailerCall<ReqT,RespT> extends SimpleForWARDingServerCall<ReqT,RespT> {

    public TrailerCall(final ServerCall<ReqT,RespT> delegatE) {
        super(delegatE);
    }
    
    @Override
    public void sendHeaders(Metadata headers) {
        headers.merge(RESPONSE_HEADERS_HOLDER_KEY.get());
        super.sendHeaders(headers);
    }

}

大佬总结

以上是大佬教程为你收集整理的如何通过 http 将 .zip 文件下载到 grpc 转码端点?全部内容,希望文章能够帮你解决如何通过 http 将 .zip 文件下载到 grpc 转码端点?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。