wangchuanjin 1 nedēļu atpakaļ
vecāks
revīzija
8a5a04a74a
6 mainītis faili ar 30 papildinājumiem un 28 dzēšanām
  1. 0 21
      logs/oss.log
  2. 17 4
      oss/grpc.go
  3. 3 0
      oss/http.go
  4. 8 1
      oss/oss.go
  5. 1 1
      oss/rpc.go
  6. 1 1
      util/warn.go

+ 0 - 21
logs/oss.log

@@ -1,21 +0,0 @@
-2025/03/21 15:12:00 HTTP server started on :8011
-2025/03/21 15:12:33 HTTP server started on :8011
-2025/03/21 15:18:09 HTTP server started on :8011
-2025/03/21 15:19:28 127.0.0.1 restful方式上传文件 all qie.jpeg false
-2025/03/21 16:10:07 HTTP server started on :8011
-2025/03/25 11:16:06 HTTP server started on :8011
-2025/03/25 11:18:06 127.0.0.1 restful方式上传文件 all 5a74334f40d2d9bbe80f2116.txt false
-2025/03/25 11:18:46 127.0.0.1 restful方式上传文件 aaa 5a74334f40d2d9bbe80f2116.txt
-2025/03/25 11:18:46 Bucket %s not found in cache, querying database aaa
-2025/03/25 11:18:46 下载失败:%v bucket id aaa not found
-2025/03/25 11:19:08 127.0.0.1 restful方式上传文件 all 5a74334f40d2d9bbe80f2116.txt
-2025/03/25 11:19:23 127.0.0.1 restful方式删除文件 all abcd
-2025/03/25 11:21:30 rpc方式获取正文 all 5a74334f40d2d9bbe80f2116.txt
-2025/03/25 11:22:23 127.0.0.1 restful方式上传文件 all 5a74334f40d2d9bbe80f2116.txt
-2025/03/25 11:22:23 127.0.0.1 restful方式上传文件 all 5a74334f40d2d9bbe80f2116.txt
-2025/03/25 11:22:39 rpc方式获取正文 all 5a74334f40d2d9bbe80f2116
-2025/03/25 11:22:47 127.0.0.1 根据标讯id获取正文 all 5a74334f40d2d9bbe80f2116.txt
-2025/03/25 11:32:57 HTTP server started on :8011
-2025/03/25 11:33:06 127.0.0.1 根据标讯id获取正文 all 5a74334f40d2d9bbe80f2116.txt
-2025/03/25 11:33:14 rpc方式获取正文 all 5a74334f40d2d9bbe80f2116
-2025/03/25 11:53:22 HTTP server started on :8011

+ 17 - 4
oss/grpc.go

@@ -4,10 +4,12 @@ import (
 	"bytes"
 	"context"
 	"fmt"
+	"google.golang.org/grpc/peer"
 	"jygit.jydev.jianyu360.cn/BaseService/ossClient/constant"
 	"jygit.jydev.jianyu360.cn/BaseService/ossClient/entity"
 	"jygit.jydev.jianyu360.cn/BaseService/ossClient/pb"
 	"log"
+	"net"
 )
 
 type myWriter struct {
@@ -26,10 +28,10 @@ type Grpc struct {
 
 func (g *Grpc) Download(req *pb.DownloadRequest, resp pb.Service_DownloadServer) error {
 	if err := checkArgs(&entity.Args{BucketID: req.BucketID, ObjectName: req.ObjectName}); err != nil {
-		log.Println("grpc方式", fmt.Sprintf(constant.DownloadFail, err))
+		log.Println(g.getIPFromContext(resp.Context()), "grpc方式", fmt.Sprintf(constant.DownloadFail, err))
 		return err
 	}
-	log.Println("grpc方式下载", req.BucketID, req.ObjectName)
+	log.Println(g.getIPFromContext(resp.Context()), "grpc方式下载", req.BucketID, req.ObjectName)
 	return Download(&myWriter{resp: resp}, 0, req.BucketID, req.ObjectName)
 }
 
@@ -38,19 +40,30 @@ func (g *Grpc) GetBidDetail(req *pb.DownloadRequest, resp pb.Service_DownloadSer
 		log.Println("grpc方式", fmt.Sprintf(constant.GetBidDetailFail, err))
 		return err
 	}
-	log.Println("grpc方式获取正文", req.BucketID, req.ObjectName)
+	log.Println(g.getIPFromContext(resp.Context()), "grpc方式获取正文", req.BucketID, req.ObjectName)
 	GetBidDetail(&myWriter{resp: resp}, req.BucketID, req.ObjectName)
 	return nil
 }
 
 func (g *Grpc) Upload(ctx context.Context, req *pb.UploadRequest) (*pb.Response, error) {
 	if err := checkArgs(&entity.Args{BucketID: req.BucketID, ObjectName: req.ObjectName}); err != nil {
-		log.Println("grpc方式", fmt.Sprintf(constant.UploadFail, err))
+		log.Println(g.getIPFromContext(ctx), "grpc方式", fmt.Sprintf(constant.UploadFail, err))
 		return nil, err
 	}
+	log.Println(g.getIPFromContext(ctx), "rpc方式上传文件", req.BucketID, req.ObjectName, req.Gzip, len(req.Stream))
 	err := Upload(req.BucketID, req.ObjectName, bytes.NewReader(req.Stream), req.Gzip)
 	if err != nil {
 		return nil, err
 	}
 	return &pb.Response{ErrorMsg: constant.UploadSuccess}, nil
 }
+
+func (g *Grpc) getIPFromContext(ctx context.Context) string {
+	var ip string
+	if p, ok := peer.FromContext(ctx); ok {
+		if addr, ok := p.Addr.(*net.TCPAddr); ok {
+			ip = addr.IP.String()
+		}
+	}
+	return ip
+}

+ 3 - 0
oss/http.go

@@ -76,6 +76,9 @@ func DownloadHandler(w http.ResponseWriter, r *http.Request) {
 		autoExtract = 1
 	}
 	log.Println(GetIp(r), "restful方式下载文件", bucketID, objectName, autoExtract)
+	if file_name := r.FormValue("file_name"); file_name != "" {
+		w.Header().Set("Content-Disposition", "attachment; filename="+file_name)
+	}
 	if err := Download(w, autoExtract, bucketID, objectName); err != nil {
 		log.Println(bucketID, objectName, "restful方式", fmt.Sprintf(constant.DownloadFail, err))
 		http.Error(w, fmt.Sprintf(constant.DownloadFail, err), http.StatusInternalServerError)

+ 8 - 1
oss/oss.go

@@ -199,7 +199,9 @@ func Download(w io.Writer, autoExtract int, bucketID, objectName string) error {
 	defer result.Response.Body.Close()
 	if rw, ok := w.(http.ResponseWriter); ok && result.Response.Headers.Get("Content-Type") != "text/plain" {
 		rw.Header().Set("Content-Type", result.Response.Headers.Get("Content-Type")) // 根据文件类型调整此行
-		rw.Header().Set("Content-Disposition", "attachment; filename="+objectName)
+		if rw.Header().Get("Content-Disposition") == "" {
+			rw.Header().Set("Content-Disposition", "attachment; filename="+objectName)
+		}
 	}
 	buf := bufferPool.Get().(*[]byte)
 	defer bufferPool.Put(buf)
@@ -222,6 +224,11 @@ func Download(w io.Writer, autoExtract int, bucketID, objectName string) error {
 				return err
 			}
 			return nil
+		} else {
+			if _, err = io.CopyBuffer(w, bytes.NewReader(data), *buf); err != nil {
+				log.Println(bucketID, objectName, "下载后不解压io.Copy出错", err)
+				return err
+			}
 		}
 	} else {
 		if _, err = io.CopyBuffer(w, result.Response.Body, *buf); err != nil {

+ 1 - 1
oss/rpc.go

@@ -68,7 +68,7 @@ func (s *OSSService) Download(args *entity.Args, reply *api.Result) error {
 		return err
 	}
 	reply.Error_msg = constant.DownloadSuccess
-	reply.Data = b
+	reply.Data = b.Bytes()
 	return nil
 }
 

+ 1 - 1
util/warn.go

@@ -108,7 +108,7 @@ func CheckDownloadQueue(ctx context.Context, prevWarn *int64) {
 
 func CheckGetDetailQueue(ctx context.Context, prevWarn *int64) {
 	warnSize := g.Config().MustGet(ctx, "getDetailLineUpWarnSize").Int64()
-	counter := atomic.LoadInt64(&DownloadCounter)
+	counter := atomic.LoadInt64(&GetDetailCounter)
 	log.Println("当前获取正文并发数", counter)
 	if counter >= warnSize {
 		alertMsg := fmt.Sprintf(g.Config().MustGet(ctx, "getDetailQueueWarn").String(), g.Config().MustGet(ctx, "downloadPoolSize").Int(), g.Config().MustGet(ctx, "getDetailFromEsPoolSize").Int(), g.Config().MustGet(ctx, "getDetailFromMgoPoolSize").Int(), warnSize)