如何通过go micro api 实现文件下载呢
来源:6-12 购物车API层 添加熔断

慕的地4438983
2022-01-07
想通过 api 实现文件下载,但是发现response里没有地方可以直接写入最后生成的byte数组,哪位有思路可以指点一下。
写回答
1回答
-
很好的问题!
你可以这样写:
文件位置:
cartApi/proto/cartApi/cartApi.proto
syntax = "proto3"; package go.micro.api.cartApi; service CartApi { rpc FindAll(Request) returns (Response) {} rpc Download(DownloadRequest) returns (stream DownloadResponse) {} } message Pair { string key = 1; repeated string values = 2; } message Request{ string method =1; string path =2; map<string,Pair> header =3; map<string,Pair> get = 4; map<string,Pair> post =5; string body = 6; string url = 7; } message Response { int32 statusCode = 1; map<string,Pair> header = 2; string body = 3; } message DownloadRequest{ string FilePath = 1; int32 MaxSize = 2; // 每一次下载的最大大小 单位MB } message DownloadResponse { string Name = 1; bytes Buffer = 2; bool IsDir = 3; }
server.go
package main import ( pb "download/proto" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) var gDownloader = &Downloader{} type DownloadServer struct { } func (d *DownloadServer) Download(in *pb.DownloadRequest, stream pb.DownloadService_DownloadServer) error { err := gDownloader.Download(in.FilePath, func (buffer []byte) error{ return stream.Send(&pb.DownloadResponse{ Buffer: buffer, }) }) if EndOfError == err { return status.Error(codes.Code(EOF), CodeToStr(EOF)) } if NormallyCloseError == err { return status.Error(codes.Code(NORMALLY_EXIST), CodeToStr(NORMALLY_EXIST)) } return err }
重点关注接口是这样写的:
func (d *DownloadServer) Download(in *pb.DownloadRequest, stream pb.DownloadService_DownloadServer) error{}
以上完整代码参考网址:
https://www.codenong.com/cs106934388/
222022-05-24
相似问题