大佬教程收集整理的这篇文章主要介绍了如何通过 http 将 .zip 文件下载到 grpc 转码端点?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有如下定义的 grpc 端点。 grpc 端点返回一个 .zip 文件。它通过 grpc 通道运行正常,但我在通过 REST 端点下载它时遇到问题。
我现在在 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,请注明来意。