wangchuanjin hace 1 mes
padre
commit
e213922fb9
Se han modificado 8 ficheros con 298 adiciones y 42 borrados
  1. 115 25
      client.go
  2. 15 0
      client_grpc_test.go
  3. 3 3
      client_rpc_test.go
  4. 5 2
      entity/entity.go
  5. 13 1
      go.mod
  6. 116 0
      go.sum
  7. 28 10
      pb/service.pb.go
  8. 3 1
      pb/service.proto

+ 115 - 25
client.go

@@ -2,18 +2,28 @@ package ossClient
 
 import (
 	"bytes"
+	"context"
 	"encoding/json"
 	"errors"
+	"google.golang.org/grpc"
 	"io"
 	"log"
 	"mime/multipart"
 	"net/http"
 	"net/rpc"
 	"strconv"
+	"sync"
+	"time"
 
 	"app.yhyue.com/moapp/jybase/api"
 	"jygit.jydev.jianyu360.cn/BaseService/ossClient/constant"
 	"jygit.jydev.jianyu360.cn/BaseService/ossClient/entity"
+	"jygit.jydev.jianyu360.cn/BaseService/ossClient/pb"
+)
+
+var (
+	GrpcCoon     *grpc.ClientConn
+	GrpcCoonOnce = &sync.Once{}
 )
 
 /* restful方式上传
@@ -52,7 +62,7 @@ func UpLoadByRestful(domain, bucketId, objectName string, stream []byte, gzip bo
 	}
 
 	// 创建 HTTP 请求
-	if respBody, err := post(domain+constant.UploadUrl, writer, body); err != nil {
+	if respBody, err := Post(domain+constant.UploadUrl, writer, body); err != nil {
 		reply.Error_msg = err.Error()
 	} else {
 		json.Unmarshal(respBody, &reply)
@@ -64,7 +74,7 @@ func UpLoadByRestful(domain, bucketId, objectName string, stream []byte, gzip bo
  * @param domain 域名,例如:https://ossservice.jianyu360.cn
  * @param bucketId 桶id
  * @param objectName 对象名称
- * @return {"error_code":0,"error_msg":"下载成功"}
+ * @return {"error_code":0,"error_msg":"下载成功","data":文件流}
  */
 func DownloadByRestful(domain, bucketId, objectName string) (reply *api.Result) {
 	reply = &api.Result{}
@@ -73,7 +83,7 @@ func DownloadByRestful(domain, bucketId, objectName string) (reply *api.Result)
 	writer := multipart.NewWriter(body)
 	writer.WriteField("bucket_id", bucketId)
 	writer.WriteField("object_name", objectName)
-	if respBody, err := post(domain+constant.DownloadUrl, writer, body); err != nil {
+	if respBody, err := Post(domain+constant.DownloadUrl, writer, body); err != nil {
 		reply.Error_msg = err.Error()
 	} else {
 		reply.Error_msg = constant.DownloadSuccess
@@ -86,7 +96,7 @@ func DownloadByRestful(domain, bucketId, objectName string) (reply *api.Result)
  * @param domain 域名,例如:https://ossservice.jianyu360.cn
  * @param bucketId 桶id
  * @param objectName 对象名称
- * @return {"error_code":0,"error_msg":"上传成功"}
+ * @return {"error_code":0,"error_msg":"删除成功"}
  */
 func DeleteByRestful(domain, bucketId, objectName string) (reply *api.Result) {
 	reply = &api.Result{}
@@ -95,7 +105,7 @@ func DeleteByRestful(domain, bucketId, objectName string) (reply *api.Result) {
 	writer := multipart.NewWriter(body)
 	writer.WriteField("bucket_id", bucketId)
 	writer.WriteField("object_name", objectName)
-	if respBody, err := post(domain+constant.DeleteUrl, writer, body); err != nil {
+	if respBody, err := Post(domain+constant.DeleteUrl, writer, body); err != nil {
 		reply.Error_msg = err.Error()
 	} else {
 		json.Unmarshal(respBody, &reply)
@@ -116,7 +126,7 @@ func GetBidDetailByRestful(domain, bucketId, objectName string) (reply *api.Resu
 	writer := multipart.NewWriter(body)
 	writer.WriteField("bucket_id", bucketId)
 	writer.WriteField("object_name", objectName)
-	if respBody, err := post(domain+constant.GetBidDetailUrl, writer, body); err != nil {
+	if respBody, err := Post(domain+constant.GetBidDetailUrl, writer, body); err != nil {
 		reply.Error_msg = err.Error()
 	} else {
 		reply.Error_msg = constant.GetBidDetailSuccess
@@ -125,7 +135,7 @@ func GetBidDetailByRestful(domain, bucketId, objectName string) (reply *api.Resu
 	return
 }
 
-func post(url string, writer *multipart.Writer, body *bytes.Buffer) ([]byte, error) {
+func Post(url string, writer *multipart.Writer, body *bytes.Buffer) ([]byte, error) {
 	// 关闭表单写入器
 	if err := writer.Close(); err != nil {
 		return nil, err
@@ -169,9 +179,9 @@ func post(url string, writer *multipart.Writer, body *bytes.Buffer) ([]byte, err
  * @return {"error_code":0,"error_msg":"上传成功"}
  * @return error 错误信息
  */
-func UpLoadByRpc(address string, args *entity.UploadArgs) (api.Result, error) {
-	var reply api.Result
-	err := rpcCall(address, "OSSService.Upload", args, &reply)
+func UpLoadByRpc(address string, args *entity.UploadArgs) (*api.Result, error) {
+	reply := &api.Result{}
+	err := RpcCall(address, "OSSService.Upload", args, reply)
 	return reply, err
 }
 
@@ -181,12 +191,12 @@ func UpLoadByRpc(address string, args *entity.UploadArgs) (api.Result, error) {
  * @param args 参数
  * @param args.BucketID 文件名
  * @param args.objectName 对象名称
- * @return {"error_code":0,"error_msg":"下载成功","data":"文件流"}
+ * @return {"error_code":0,"error_msg":"下载成功","data":文件流}
  * @return error 错误信息
  */
-func DownloadByRpc(address string, args *entity.Args) (api.Result, error) {
-	var reply api.Result
-	err := rpcCall(address, "OSSService.Download", args, &reply)
+func DownloadByRpc(address string, args *entity.Args) (*api.Result, error) {
+	reply := &api.Result{}
+	err := RpcCall(address, "OSSService.Download", args, reply)
 	return reply, err
 }
 
@@ -198,9 +208,9 @@ func DownloadByRpc(address string, args *entity.Args) (api.Result, error) {
  * @return {"error_code":0,"error_msg":"删除成功"}
  * @return error 错误信息
  */
-func DeleteByRpc(address string, args *entity.Args) (api.Result, error) {
-	var reply api.Result
-	err := rpcCall(address, "OSSService.Delete", args, &reply)
+func DeleteByRpc(address string, args *entity.Args) (*api.Result, error) {
+	reply := &api.Result{}
+	err := RpcCall(address, "OSSService.Delete", args, reply)
 	return reply, err
 }
 
@@ -210,25 +220,105 @@ func DeleteByRpc(address string, args *entity.Args) (api.Result, error) {
  * @param args 参数
  * @param args.BucketID 文件名
  * @param args.objectName 对象名称
- * @return {"error_code":0,"error_msg":"下载成功","data":"正文内容"}
+ * @return {"error_code":0,"error_msg":"获取成功","data":"正文内容"}
  * @return error 错误信息
  */
-func GetBidDetailByRpc(address string, args *entity.Args) (api.Result, error) {
-	var reply api.Result
-	err := rpcCall(address, "OSSService.GetBidDetail", args, &reply)
+func GetBidDetailByRpc(address string, args *entity.Args) (*api.Result, error) {
+	reply := &api.Result{}
+	err := RpcCall(address, "OSSService.GetBidDetail", args, reply)
 	return reply, err
 }
-func rpcCall(address, serviceMethod string, args any, reply any) error {
-	client, err := rpc.DialHTTP("tcp", address)
+
+// rpc call
+func RpcCall(address, serviceMethod string, args any, reply any) error {
+	conn, err := rpc.DialHTTP("tcp", address)
 	if err != nil {
 		log.Println(err)
 		return err
 	}
-	defer client.Close()
-	err = client.Call(serviceMethod, args, reply)
+	err = conn.Call(serviceMethod, args, reply)
 	if err != nil {
 		log.Println(err)
 		return err
 	}
 	return nil
 }
+
+// grpc call
+func GrpcCall(address string, args *entity.Args) (pb.ServiceClient, context.Context, error) {
+	var err error
+	GrpcCoonOnce.Do(func() {
+		GrpcCoon, err = grpc.Dial(address, grpc.WithInsecure())
+	})
+	var ctx context.Context
+	if args.Timeout == -1 {
+		ctx = context.Background()
+	} else {
+		thisCtx, cancel := context.WithTimeout(context.TODO(), args.Timeout*time.Second)
+		ctx = thisCtx
+		defer cancel()
+	}
+	if err != nil {
+		log.Println(err)
+		return nil, ctx, err
+	}
+	return pb.NewServiceClient(GrpcCoon), ctx, nil
+}
+
+/*
+ *grpc方式下载
+ * @param address 域名,例如:192.168.3.206:8110
+ * @param args 参数
+ * @param args.BucketID 文件名
+ * @param args.objectName 对象名称
+ * @return []byte
+ * @return error 错误信息
+ */
+func DownloadByGrpc(address string, args *entity.Args) (*pb.Response, error) {
+	serviceClient, ctx, err := GrpcCall(address, args)
+	result := &pb.Response{}
+	if err != nil {
+		return result, err
+	}
+	resp, err := serviceClient.Download(ctx, &pb.Request{BucketID: args.BucketID, ObjectName: args.ObjectName})
+	if err != nil {
+		log.Println(err)
+		return nil, err
+	}
+	b := &bytes.Buffer{}
+	for {
+		reply, err := resp.Recv()
+		if err == io.EOF {
+			break
+		} else if err != nil {
+			log.Println(err)
+			return nil, err
+		}
+		result.ErrorMsg = reply.ErrorMsg
+		result.ErrorCode = reply.ErrorCode
+		b.Write(reply.Data)
+	}
+	result.Data = b.Bytes()
+	return result, nil
+}
+
+/*
+ *grpc方式获取标讯正文
+ * @param address 域名,例如:192.168.3.206:8110
+ * @param args 参数
+ * @param args.BucketID 文件名
+ * @param args.objectName 对象名称
+ * @return {"error_code":0,"error_msg":"获取成功","data":"正文内容"}
+ * @return error 错误信息
+ */
+func GetBidDetailByGrpc(address string, args *entity.Args) (*api.Result, error) {
+	result, err := DownloadByGrpc(address, args)
+	if err != nil {
+		return &api.Result{}, err
+	}
+	return &api.Result{
+		Data:       string(result.Data),
+		Error_code: int(result.ErrorCode),
+		Error_msg:  result.ErrorMsg,
+	}, nil
+}

+ 15 - 0
client_grpc_test.go

@@ -0,0 +1,15 @@
+package ossClient
+
+import (
+	"jygit.jydev.jianyu360.cn/BaseService/ossClient/entity"
+	"testing"
+)
+
+// rpc方式上传附件
+func TestDownloadByGrpc(t *testing.T) {
+	b, err := DownloadByGrpc("127.0.0.1:8012", &entity.Args{
+		BucketID:   "58b9393361a0721f1516be41",
+		ObjectName: imgFileName,
+	})
+	t.Log(err, string(b))
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 3 - 3
client_rpc_test.go


+ 5 - 2
entity/entity.go

@@ -1,5 +1,7 @@
 package entity
 
+import "time"
+
 // RPC相关结构体
 type UploadArgs struct {
 	Stream     []byte // 客户端将文件数据传递过来
@@ -9,6 +11,7 @@ type UploadArgs struct {
 }
 
 type Args struct {
-	BucketID   string //桶id
-	ObjectName string //对象名称
+	BucketID   string        //桶id
+	ObjectName string        //对象名称
+	Timeout    time.Duration //超时时间
 }

+ 13 - 1
go.mod

@@ -2,4 +2,16 @@ module jygit.jydev.jianyu360.cn/BaseService/ossClient
 
 go 1.20
 
-require app.yhyue.com/moapp/jybase v0.0.0-20250403014436-53740a2395aa
+require (
+	app.yhyue.com/moapp/jybase v0.0.0-20250403014436-53740a2395aa
+	github.com/golang/protobuf v1.5.2
+	google.golang.org/grpc v1.38.0
+)
+
+require (
+	golang.org/x/net v0.17.0 // indirect
+	golang.org/x/sys v0.13.0 // indirect
+	golang.org/x/text v0.22.0 // indirect
+	google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c // indirect
+	google.golang.org/protobuf v1.26.0 // indirect
+)

+ 116 - 0
go.sum

@@ -1,2 +1,118 @@
 app.yhyue.com/moapp/jybase v0.0.0-20250403014436-53740a2395aa h1:F45Yi0O0W7ezagpb4EWc57CGNoQ60HN3Ut7npO/sto4=
 app.yhyue.com/moapp/jybase v0.0.0-20250403014436-53740a2395aa/go.mod h1:OEtMbsn7wY/7MLgV7yDUpVDKExUoj3B8h+4w4ZckJQQ=
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
+golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
+golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0=
+google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0=
+google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

+ 28 - 10
pb/service.pb.go

@@ -70,7 +70,9 @@ func (m *Request) GetObjectName() string {
 }
 
 type Response struct {
-	Content              []byte   `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"`
+	Data                 []byte   `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
+	ErrorCode            int64    `protobuf:"varint,2,opt,name=errorCode,proto3" json:"errorCode,omitempty"`
+	ErrorMsg             string   `protobuf:"bytes,3,opt,name=errorMsg,proto3" json:"errorMsg,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
@@ -101,13 +103,27 @@ func (m *Response) XXX_DiscardUnknown() {
 
 var xxx_messageInfo_Response proto.InternalMessageInfo
 
-func (m *Response) GetContent() []byte {
+func (m *Response) GetData() []byte {
 	if m != nil {
-		return m.Content
+		return m.Data
 	}
 	return nil
 }
 
+func (m *Response) GetErrorCode() int64 {
+	if m != nil {
+		return m.ErrorCode
+	}
+	return 0
+}
+
+func (m *Response) GetErrorMsg() string {
+	if m != nil {
+		return m.ErrorMsg
+	}
+	return ""
+}
+
 func init() {
 	proto.RegisterType((*Request)(nil), "protobuf.Request")
 	proto.RegisterType((*Response)(nil), "protobuf.Response")
@@ -116,18 +132,20 @@ func init() {
 func init() { proto.RegisterFile("service.proto", fileDescriptor_a0b84a42fa06f626) }
 
 var fileDescriptor_a0b84a42fa06f626 = []byte{
-	// 176 bytes of a gzipped FileDescriptorProto
+	// 204 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x2d, 0x4e, 0x2d, 0x2a,
 	0xcb, 0x4c, 0x4e, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x00, 0x53, 0x49, 0xa5, 0x69,
 	0x4a, 0xae, 0x5c, 0xec, 0x41, 0xa9, 0x85, 0xa5, 0xa9, 0xc5, 0x25, 0x42, 0x52, 0x5c, 0x1c, 0x49,
 	0xa5, 0xc9, 0xd9, 0xa9, 0x25, 0x9e, 0x2e, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x70, 0xbe,
 	0x90, 0x1c, 0x17, 0x57, 0x7e, 0x52, 0x56, 0x6a, 0x72, 0x89, 0x5f, 0x62, 0x6e, 0xaa, 0x04, 0x13,
-	0x58, 0x16, 0x49, 0x44, 0x49, 0x85, 0x8b, 0x23, 0x28, 0xb5, 0xb8, 0x20, 0x3f, 0xaf, 0x38, 0x55,
-	0x48, 0x82, 0x8b, 0x3d, 0x39, 0x3f, 0xaf, 0x24, 0x35, 0xaf, 0x04, 0x6c, 0x0c, 0x4f, 0x10, 0x8c,
-	0x6b, 0x64, 0xc7, 0xc5, 0x1e, 0x0c, 0x71, 0x87, 0x90, 0x31, 0x17, 0x87, 0x4b, 0x7e, 0x79, 0x5e,
-	0x4e, 0x7e, 0x62, 0x8a, 0x90, 0xa0, 0x1e, 0xcc, 0x39, 0x7a, 0x50, 0xb7, 0x48, 0x09, 0x21, 0x0b,
-	0x41, 0xcc, 0x35, 0x60, 0x74, 0x62, 0x8f, 0x62, 0xd5, 0xd3, 0xd3, 0x2f, 0x48, 0x4a, 0x62, 0x03,
-	0xcb, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x4e, 0xfa, 0x54, 0xd7, 0xd7, 0x00, 0x00, 0x00,
+	0x58, 0x16, 0x49, 0x44, 0x29, 0x82, 0x8b, 0x23, 0x28, 0xb5, 0xb8, 0x20, 0x3f, 0xaf, 0x38, 0x55,
+	0x48, 0x88, 0x8b, 0x25, 0x25, 0xb1, 0x24, 0x11, 0x6c, 0x06, 0x4f, 0x10, 0x98, 0x2d, 0x24, 0xc3,
+	0xc5, 0x99, 0x5a, 0x54, 0x94, 0x5f, 0xe4, 0x9c, 0x9f, 0x02, 0xd1, 0xce, 0x1c, 0x84, 0x10, 0x00,
+	0xd9, 0x0c, 0xe6, 0xf8, 0x16, 0xa7, 0x4b, 0x30, 0x43, 0x6c, 0x86, 0xf1, 0x8d, 0xec, 0xb8, 0xd8,
+	0x83, 0x21, 0x6e, 0x17, 0x32, 0xe6, 0xe2, 0x70, 0xc9, 0x2f, 0xcf, 0xcb, 0xc9, 0x4f, 0x4c, 0x11,
+	0x12, 0xd4, 0x83, 0x79, 0x41, 0x0f, 0xea, 0x7e, 0x29, 0x21, 0x64, 0x21, 0x88, 0x5b, 0x0c, 0x18,
+	0x9d, 0xd8, 0xa3, 0x58, 0xf5, 0xf4, 0xf4, 0x0b, 0x92, 0x92, 0xd8, 0xc0, 0xb2, 0xc6, 0x80, 0x00,
+	0x00, 0x00, 0xff, 0xff, 0xbe, 0xb8, 0x80, 0x00, 0x0b, 0x01, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.

+ 3 - 1
pb/service.proto

@@ -14,5 +14,7 @@ message Request {
 }
 
 message Response {
-  bytes content = 1;
+  bytes data = 1;
+  int64 errorCode = 2;
+  string errorMsg = 3;
 }

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio