grpc.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package oss
  2. import (
  3. "bytes"
  4. "context"
  5. "fmt"
  6. "google.golang.org/grpc/peer"
  7. "jygit.jydev.jianyu360.cn/BaseService/ossClient/constant"
  8. "jygit.jydev.jianyu360.cn/BaseService/ossClient/entity"
  9. "jygit.jydev.jianyu360.cn/BaseService/ossClient/pb"
  10. "log"
  11. "net"
  12. )
  13. type myWriter struct {
  14. resp pb.Service_DownloadServer
  15. }
  16. func (m *myWriter) Write(b []byte) (n int, err error) {
  17. n = len(b)
  18. err = m.resp.Send(&pb.Response{Data: b})
  19. return
  20. }
  21. type Grpc struct {
  22. pb.UnimplementedServiceServer
  23. }
  24. func (g *Grpc) Download(req *pb.DownloadRequest, resp pb.Service_DownloadServer) error {
  25. if err := checkArgs(&entity.Args{BucketID: req.BucketID, ObjectName: req.ObjectName}); err != nil {
  26. log.Println(g.getIPFromContext(resp.Context()), "grpc方式", fmt.Sprintf(constant.DownloadFail, err))
  27. return err
  28. }
  29. log.Println(g.getIPFromContext(resp.Context()), "grpc方式下载", req.BucketID, req.ObjectName)
  30. return Download(&myWriter{resp: resp}, 0, req.BucketID, req.ObjectName)
  31. }
  32. func (g *Grpc) GetBidDetail(req *pb.DownloadRequest, resp pb.Service_DownloadServer) error {
  33. if err := checkArgs(&entity.Args{BucketID: req.BucketID, ObjectName: req.ObjectName}); err != nil {
  34. log.Println("grpc方式", fmt.Sprintf(constant.GetBidDetailFail, err))
  35. return err
  36. }
  37. log.Println(g.getIPFromContext(resp.Context()), "grpc方式获取正文", req.BucketID, req.ObjectName)
  38. GetBidDetail(&myWriter{resp: resp}, req.BucketID, req.ObjectName)
  39. return nil
  40. }
  41. func (g *Grpc) Upload(ctx context.Context, req *pb.UploadRequest) (*pb.Response, error) {
  42. if err := checkArgs(&entity.Args{BucketID: req.BucketID, ObjectName: req.ObjectName}); err != nil {
  43. log.Println(g.getIPFromContext(ctx), "grpc方式", fmt.Sprintf(constant.UploadFail, err))
  44. return nil, err
  45. }
  46. log.Println(g.getIPFromContext(ctx), "rpc方式上传文件", req.BucketID, req.ObjectName, req.Gzip, len(req.Stream))
  47. err := Upload(req.BucketID, req.ObjectName, bytes.NewReader(req.Stream), req.Gzip)
  48. if err != nil {
  49. return nil, err
  50. }
  51. return &pb.Response{ErrorMsg: constant.UploadSuccess}, nil
  52. }
  53. func (g *Grpc) getIPFromContext(ctx context.Context) string {
  54. var ip string
  55. if p, ok := peer.FromContext(ctx); ok {
  56. if addr, ok := p.Addr.(*net.TCPAddr); ok {
  57. ip = addr.IP.String()
  58. }
  59. }
  60. return ip
  61. }