소스 검색

feat:xiugai

wangchuanjin 1 개월 전
부모
커밋
e65cb001ba
8개의 변경된 파일189개의 추가작업 그리고 112개의 파일을 삭제
  1. 1 0
      config.yaml
  2. 11 11
      go.mod
  3. 37 26
      go.sum
  4. 18 0
      main.go
  5. 43 0
      oss/grpc.go
  6. 10 12
      oss/http.go
  7. 55 43
      oss/oss.go
  8. 14 20
      oss/rpc.go

+ 1 - 0
config.yaml

@@ -1,4 +1,5 @@
 port: ":8011"
+grpcPort: ":8012"
 oss_accounts:
   - id: "main"
     endpoint: "oss-cn-beijing.aliyuncs.com"

+ 11 - 11
go.mod

@@ -10,8 +10,9 @@ require (
 	github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible
 	github.com/go-redis/redis/v8 v8.11.5
 	github.com/gogf/gf/v2 v2.7.0
+	google.golang.org/grpc v1.64.0
 	gopkg.in/natefinch/lumberjack.v2 v2.2.1
-	jygit.jydev.jianyu360.cn/BaseService/ossClient v0.0.0-20250415084929-bc2e49395095
+	jygit.jydev.jianyu360.cn/BaseService/ossClient v0.0.0-20250617032421-365fe18d2c8c
 )
 
 require (
@@ -40,11 +41,11 @@ require (
 	github.com/go-sql-driver/mysql v1.7.0 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/golang/mock v1.6.0 // indirect
-	github.com/golang/protobuf v1.5.3 // indirect
+	github.com/golang/protobuf v1.5.4 // indirect
 	github.com/golang/snappy v0.0.4 // indirect
 	github.com/gomodule/redigo v1.8.9 // indirect
 	github.com/google/gnostic v0.5.7-v3refs // indirect
-	github.com/google/go-cmp v0.5.9 // indirect
+	github.com/google/go-cmp v0.6.0 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
 	github.com/google/pprof v0.0.0-20211214055906-6f57359322fd // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect
@@ -100,18 +101,17 @@ require (
 	go.uber.org/automaxprocs v1.5.2 // indirect
 	go.uber.org/multierr v1.9.0 // indirect
 	go.uber.org/zap v1.24.0 // indirect
-	golang.org/x/crypto v0.14.0 // indirect
-	golang.org/x/net v0.17.0 // indirect
-	golang.org/x/oauth2 v0.6.0 // indirect
+	golang.org/x/crypto v0.21.0 // indirect
+	golang.org/x/net v0.22.0 // indirect
+	golang.org/x/oauth2 v0.18.0 // indirect
 	golang.org/x/sync v0.11.0 // indirect
-	golang.org/x/sys v0.13.0 // indirect
-	golang.org/x/term v0.13.0 // indirect
+	golang.org/x/sys v0.18.0 // indirect
+	golang.org/x/term v0.18.0 // indirect
 	golang.org/x/text v0.22.0 // indirect
 	golang.org/x/time v0.11.0 // indirect
-	google.golang.org/appengine v1.6.7 // indirect
+	google.golang.org/appengine v1.6.8 // indirect
 	google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect
-	google.golang.org/grpc v1.55.0 // indirect
-	google.golang.org/protobuf v1.30.0 // indirect
+	google.golang.org/protobuf v1.36.0 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect

+ 37 - 26
go.sum

@@ -136,8 +136,8 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
-github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE=
-github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ=
+github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68=
+github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -166,8 +166,8 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
 github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
 github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
 github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
 github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
@@ -188,8 +188,8 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
 github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -206,8 +206,8 @@ github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8
 github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
-github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
 github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
@@ -352,6 +352,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
 github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
 github.com/yuin/gopher-lua v1.1.0 h1:BojcDhfyDWgU2f2TOzYK/g5p2gxMrku8oupLDqlnSqE=
 github.com/yuin/gopher-lua v1.1.0/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
 github.com/zeromicro/go-zero v1.5.2 h1:vpMlZacCMtgdtYzKI3OMyhS6mZ9UQctiAh0J7gIq31I=
@@ -406,9 +407,10 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
-golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
+golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
+golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -440,6 +442,7 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
 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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -467,18 +470,20 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R
 golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
-golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
+golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw=
-golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw=
+golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
+golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
 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-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -489,6 +494,7 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
 golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -523,12 +529,15 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/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/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
-golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
+golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -537,6 +546,7 @@ 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.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
 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/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -587,6 +597,7 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc
 golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
 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=
@@ -613,8 +624,8 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
 google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
 google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
-google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -665,8 +676,8 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp
 google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
 google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
 google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
-google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag=
-google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8=
+google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY=
+google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg=
 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=
@@ -680,8 +691,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
 google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
-google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ=
+google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -720,8 +731,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-jygit.jydev.jianyu360.cn/BaseService/ossClient v0.0.0-20250415084929-bc2e49395095 h1:9E1+gKwtEXXzXbPmj4Dnz6wXTi2SD8ozpjQRGnh6p1I=
-jygit.jydev.jianyu360.cn/BaseService/ossClient v0.0.0-20250415084929-bc2e49395095/go.mod h1:YsGX4mWac558Q1oI/B4dPzySot308jV929LHiJERomg=
+jygit.jydev.jianyu360.cn/BaseService/ossClient v0.0.0-20250617032421-365fe18d2c8c h1:0gJtsJipNfH6FvR4LoblL2tfjDjo2YuKYsaS/ZPe7YY=
+jygit.jydev.jianyu360.cn/BaseService/ossClient v0.0.0-20250617032421-365fe18d2c8c/go.mod h1:GamMXV9LlDWGyQQrHVojZUOJqZpxa5cuEA9W5D+PGG8=
 k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU=
 k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE=
 k8s.io/apimachinery v0.27.0-alpha.3 h1:uujqsdFrbqF+cEbqFHrkLKp+s3XxRgphTpc6Yg84qLo=

+ 18 - 0
main.go

@@ -5,11 +5,14 @@ import (
 	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/os/gctx"
 	"github.com/gogf/gf/v2/os/gfsnotify"
+	"google.golang.org/grpc"
 	"gopkg.in/natefinch/lumberjack.v2"
 	"jygit.jydev.jianyu360.cn/BaseService/ossClient/constant"
+	"jygit.jydev.jianyu360.cn/BaseService/ossClient/pb"
 	ossService "jygit.jydev.jianyu360.cn/BaseService/ossService/oss"
 	"jygit.jydev.jianyu360.cn/BaseService/ossService/util"
 	"log"
+	"net"
 	"net/http"
 	"net/rpc"
 	"time"
@@ -56,6 +59,21 @@ func main() {
 			util.CheckDownLoadQueue(ctx, &downLoadQueuePrevWarn)
 		}
 	}()
+	go func() {
+		//创建一个grpc 服务器
+		s := grpc.NewServer()
+		//注册事件
+		pb.RegisterServiceServer(s, &ossService.Grpc{})
+		grpcPort := g.Config().MustGet(gctx.New(), "grpcPort").String()
+		//处理链接
+		listen, err := net.Listen("tcp", grpcPort)
+		if err != nil {
+			log.Println(err)
+		} else {
+			log.Println("grpc server is listening", grpcPort)
+		}
+		s.Serve(listen)
+	}()
 	// 启动RPC服务:注册OSSService,实现接口调用
 	rpcService := new(ossService.OSSService)
 	rpc.Register(rpcService)

+ 43 - 0
oss/grpc.go

@@ -0,0 +1,43 @@
+package oss
+
+import (
+	"jygit.jydev.jianyu360.cn/BaseService/ossClient/constant"
+	"jygit.jydev.jianyu360.cn/BaseService/ossClient/entity"
+	"jygit.jydev.jianyu360.cn/BaseService/ossClient/pb"
+	"log"
+)
+
+type myWriter struct {
+	resp     pb.Service_DownloadServer
+	errorMsg string
+}
+
+func (m *myWriter) Write(b []byte) (n int, err error) {
+	n = len(b)
+	err = m.resp.Send(&pb.Response{Data: b})
+	return
+}
+
+type Grpc struct {
+	pb.UnimplementedServiceServer
+}
+
+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(constant.UploadFail, err)
+		return err
+	}
+	log.Println("grpc方式下载文件", req.BucketID, req.ObjectName)
+	return Download(&myWriter{resp: resp, errorMsg: constant.DownloadSuccess}, 0, req.BucketID, req.ObjectName)
+}
+
+func (g *Grpc) GetBidDetail(req *pb.DownloadRequest, resp pb.Service_DownloadServer) error {
+	if err := checkArgs(&entity.Args{BucketID: req.BucketID, ObjectName: req.ObjectName}); err != nil {
+		log.Println(constant.GetBidDetailFail, err)
+		return err
+	}
+	log.Println("grpc方式获取正文", req.BucketID, req.ObjectName)
+	req.ObjectName += ".txt"
+	GetBidDetail(&myWriter{resp: resp, errorMsg: constant.GetBidDetailSuccess}, req.BucketID, req.ObjectName)
+	return nil
+}

+ 10 - 12
oss/http.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/gogf/gf/v2/os/gctx"
+	"github.com/gogf/gf/v2/util/gconv"
 	"io"
 	"log"
 	"net/http"
@@ -32,7 +33,6 @@ func UploadHandler(w http.ResponseWriter, r *http.Request) {
 	gzipFlag := r.FormValue("gzip")
 	log.Println(GetIp(r), "restful方式上传文件", bucketID, objectName, gzipFlag)
 	text := strings.TrimSpace(r.FormValue("text"))
-	gzipEnabled := gzipFlag == "" || gzipFlag == "true"
 	var reader io.Reader
 	file, _, err := r.FormFile("file")
 	status, message := func() (int, string) {
@@ -46,7 +46,7 @@ func UploadHandler(w http.ResponseWriter, r *http.Request) {
 			reader = file
 			defer file.Close()
 		}
-		err = UploadAttachment(bucketID, objectName, reader, gzipEnabled)
+		err = Upload(bucketID, objectName, reader, gzipFlag == "true")
 		if err != nil {
 			return -1, fmt.Sprintf(constant.UploadFail, err)
 		}
@@ -71,18 +71,16 @@ func DownloadHandler(w http.ResponseWriter, r *http.Request) {
 		http.Error(w, api.Error_msg_1002+"object_name", http.StatusInternalServerError)
 		return
 	}
-	log.Println(GetIp(r), "restful方式下载文件", bucketID, objectName)
-	data, headers, err := DownloadAttachment(bucketID, objectName)
-	if err != nil {
+	autoExtract := 0
+	if gconv.Bool(r.FormValue("extract")) {
+		autoExtract = 1
+	}
+	log.Println(GetIp(r), "restful方式下载文件", bucketID, objectName, autoExtract)
+	if err := Download(w, autoExtract, bucketID, objectName); err != nil {
 		log.Println(constant.DownloadFail, err)
 		http.Error(w, fmt.Sprintf(constant.DownloadFail, err), http.StatusInternalServerError)
 		return
 	}
-	if headers.Get("Content-Type") != "text/plain" {
-		w.Header().Set("Content-Type", headers.Get("Content-Type")) // 根据文件类型调整此行
-		w.Header().Set("Content-Disposition", "attachment; filename="+objectName)
-	}
-	w.Write(data)
 }
 
 /* restful方式删除
@@ -98,7 +96,7 @@ func DeleteHandler(w http.ResponseWriter, r *http.Request) {
 	objectName := r.FormValue("object_name")
 	log.Println(GetIp(r), "restful方式删除文件", bucketID, objectName)
 	status, message := func() (int, string) {
-		err := DeleteAttachment(bucketID, objectName)
+		err := Delete(bucketID, objectName)
 		if err != nil {
 			return -1, fmt.Sprintf(constant.DeleteFail, err)
 		}
@@ -141,5 +139,5 @@ func BidDetailHandler(w http.ResponseWriter, r *http.Request) {
 	}
 	objectName += ".txt"
 	log.Println(GetIp(r), "根据标讯id获取正文", bucketID, objectName)
-	w.Write(GetBidDetail(bucketID, objectName))
+	GetBidDetail(w, bucketID, objectName)
 }

+ 55 - 43
oss/oss.go

@@ -1,13 +1,16 @@
 package oss
 
 import (
+	"app.yhyue.com/moapp/jybase/api"
 	"bytes"
 	"compress/gzip"
+	"errors"
 	"fmt"
 	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/os/gctx"
 	"io"
 	"io/ioutil"
+	"jygit.jydev.jianyu360.cn/BaseService/ossClient/entity"
 	"log"
 	"net/http"
 	"sync"
@@ -25,15 +28,11 @@ var (
 	DownLoadPool         = make(chan bool, g.Config().MustGet(gctx.New(), "downLoadPoolSize").Int())
 	GetDetailFromEsPool  = make(chan bool, g.Config().MustGet(gctx.New(), "getDetailFromEsPoolSize").Int())
 	GetDetailFromMgoPool = make(chan bool, g.Config().MustGet(gctx.New(), "getDetailFromMgoPoolSize").Int())
-	getDetail            = map[string]func(bucketID, objectName string) []byte{
-		"oss": func(bucketID, objectName string) []byte {
-			b, _, e := DownloadAttachment(bucketID, objectName)
-			if e == nil && b != nil && len(b) > 0 {
-				return b
-			}
-			return nil
+	getDetail            = map[string]func(w io.Writer, bucketID, objectName string){
+		"oss": func(w io.Writer, bucketID, objectName string) {
+			Download(w, 0, bucketID, objectName)
 		},
-		"es": func(bucketID, objectName string) []byte {
+		"es": func(w io.Writer, bucketID, objectName string) {
 			GetDetailFromEsPool <- true
 			defer func() {
 				<-GetDetailFromEsPool
@@ -42,11 +41,10 @@ var (
 			list := es.VarEs.Get(indexName, indexName, fmt.Sprintf(`{"query":{"bool":{"filter":{"term":{"_id":"%s"}}}},"_source":["detail"]}`, objectName))
 			if list != nil && len(*list) > 0 {
 				detail, _ := (*list)[0]["detail"].(string)
-				return []byte(detail)
+				io.Copy(w, bytes.NewReader([]byte(detail)))
 			}
-			return nil
 		},
-		"mgo": func(bucketID, objectName string) []byte {
+		"mgo": func(w io.Writer, bucketID, objectName string) {
 			GetDetailFromMgoPool <- true
 			defer func() {
 				<-GetDetailFromMgoPool
@@ -54,9 +52,8 @@ var (
 			data, _ := config.Mgo.FindOneByField(g.Config().MustGet(gctx.New(), "mongodb.collection").String(), objectName, `{"detail":1}`)
 			if data != nil && len(*data) > 0 {
 				detail, _ := (*data)["detail"].(string)
-				return []byte(detail)
+				io.Copy(w, bytes.NewReader([]byte(detail)))
 			}
-			return nil
 		},
 	}
 )
@@ -76,14 +73,14 @@ func GetBucket(bucketID string) (config.BucketInfo, error) {
 }
 
 // bucketPool 缓存 bucket 对象,避免重复创建
-var bucketPool sync.Map // key: bucketID, value: *ossSDK.Bucket
+//var bucketPool sync.Map // key: bucketID, value: *ossSDK.Bucket
 
 // GetCachedBucket 对外暴露统一入口,根据 bucketID 获取 *ossSDK.Bucket 对象
 func GetCachedBucket(bucketID string) (*ossSDK.Bucket, error) {
 	// 优先从对象池取
-	if cached, ok := bucketPool.Load(bucketID); ok {
-		return cached.(*ossSDK.Bucket), nil
-	}
+	//if cached, ok := bucketPool.Load(bucketID); ok {
+	//	return cached.(*ossSDK.Bucket), nil
+	//}
 
 	// 如果不存在则依次读取 bucketInfo 和 OSS client 信息
 	bucketInfo, err := GetBucket(bucketID)
@@ -102,7 +99,7 @@ func GetCachedBucket(bucketID string) (*ossSDK.Bucket, error) {
 	}
 
 	// 存入对象池
-	bucketPool.Store(bucketID, bucket)
+	//bucketPool.Store(bucketID, bucket)
 	return bucket, nil
 }
 
@@ -120,7 +117,7 @@ func getOSSClient(accountID string) (*ossSDK.Client, error) {
 }
 
 // UploadAttachment 上传附件;如果gzipEnabled为true,则进行gzip压缩(使用 io.Pipe 实现流式压缩)
-func UploadAttachment(bucketID, objectName string, data io.Reader, gzipEnabled bool) error {
+func Upload(bucketID, objectName string, data io.Reader, gzipEnabled bool) error {
 	bucket, err := GetCachedBucket(bucketID)
 	if err != nil {
 		return err
@@ -145,8 +142,8 @@ func UploadAttachment(bucketID, objectName string, data io.Reader, gzipEnabled b
 	return bucket.PutObject(objectName, reader)
 }
 
-// DownloadAttachment 下载附件,如果检测到数据为gzip压缩,则自动解压后返回
-func DownloadAttachment(bucketID, objectName string) ([]byte, http.Header, error) {
+// downloadAttachment 下载,如果检测到数据为gzip压缩,则自动解压后返回
+func Download(w io.Writer, autoExtract int, bucketID, objectName string) error {
 	atomic.AddInt64(&util.DownLoadCounter, 1)
 	DownLoadPool <- true
 	defer func() {
@@ -155,36 +152,45 @@ func DownloadAttachment(bucketID, objectName string) ([]byte, http.Header, error
 	}()
 	bucket, err := GetCachedBucket(bucketID)
 	if err != nil {
-		return nil, nil, err
+		return err
 	}
 
 	result, err := bucket.DoGetObject(&ossSDK.GetObjectRequest{objectName}, nil)
 	if err != nil {
-		return nil, nil, err
+		return err
 	}
 	defer result.Response.Body.Close()
-	data, err := ioutil.ReadAll(result.Response.Body)
-	if err != nil {
-		return nil, nil, err
+	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)
 	}
-	// 判断是否为gzip压缩格式(判断前两个字节)
-	if len(data) >= 2 && data[0] == 0x1f && data[1] == 0x8b {
-		gzipReader, err := gzip.NewReader(bytes.NewReader(data))
+	if autoExtract == 1 {
+		data, err := ioutil.ReadAll(result.Response.Body)
 		if err != nil {
-			return nil, nil, err
+			return err
 		}
-		defer gzipReader.Close()
-		data, err = ioutil.ReadAll(gzipReader)
-		if err != nil {
-			return nil, nil, err
+		// 判断是否为gzip压缩格式(判断前两个字节)
+		if len(data) >= 2 && data[0] == 0x1f && data[1] == 0x8b {
+			gzipReader, err := gzip.NewReader(bytes.NewReader(data))
+			if err != nil {
+				return err
+			}
+			defer gzipReader.Close()
+			if _, err = io.Copy(w, gzipReader); err != nil {
+				return err
+			}
+			return nil
+		}
+	} else {
+		if _, err = io.Copy(w, result.Response.Body); err != nil {
+			return err
 		}
-		return data, result.Response.Headers, nil
 	}
-	return data, result.Response.Headers, nil
+	return nil
 }
 
 // DeleteAttachment 删除附件
-func DeleteAttachment(bucketID, objectName string) error {
+func Delete(bucketID, objectName string) error {
 	bucket, err := GetCachedBucket(bucketID)
 	if err != nil {
 		return err
@@ -201,18 +207,24 @@ func LoadOSSAccounts() {
 	for _, acc := range oas {
 		accountMap.Store(acc.ID, *acc)
 	}
-	bucketPool.Clear()
+	//bucketPool.Clear()
 }
 
 // 获取标讯正文,优先从oss中取,再从es中取
-func GetBidDetail(bucketID, objectName string) []byte {
+func GetBidDetail(w io.Writer, bucketID, objectName string) {
 	atomic.AddInt64(&util.GetDetailCounter, 1)
 	defer atomic.AddInt64(&util.GetDetailCounter, -1)
 	for _, v := range g.Config().MustGet(gctx.New(), "getDetailOrder").Strings() {
-		detail := getDetail[v](bucketID, objectName)
-		if detail != nil && len(detail) > 0 {
-			return detail
-		}
+		getDetail[v](w, bucketID, objectName)
+	}
+}
+
+// 检查入参
+func checkArgs(args *entity.Args) error {
+	if args.BucketID == "" {
+		return errors.New(api.Error_msg_1002 + "BucketID")
+	} else if args.ObjectName == "" {
+		return errors.New(api.Error_msg_1002 + "ObjectName")
 	}
 	return nil
 }

+ 14 - 20
oss/rpc.go

@@ -5,6 +5,7 @@ import (
 	"errors"
 	"io/ioutil"
 	"log"
+	"strings"
 
 	"app.yhyue.com/moapp/jybase/api"
 	"jygit.jydev.jianyu360.cn/BaseService/ossClient/constant"
@@ -27,7 +28,7 @@ type OSSService struct {
  * @return error 错误信息
  */
 func (s *OSSService) Upload(args *entity.UploadArgs, reply *api.Result) error {
-	if err := s.checkArgs(&entity.Args{BucketID: args.BucketID, ObjectName: args.ObjectName}); err != nil {
+	if err := checkArgs(&entity.Args{BucketID: args.BucketID, ObjectName: args.ObjectName}); err != nil {
 		log.Println(err.Error())
 		return err
 	} else if args.Stream == nil || len(args.Stream) == 0 {
@@ -36,7 +37,7 @@ func (s *OSSService) Upload(args *entity.UploadArgs, reply *api.Result) error {
 		return err
 	}
 	log.Println("rpc方式上传文件", args.BucketID, args.ObjectName, args.Gzip, len(args.Stream))
-	err := UploadAttachment(args.BucketID, args.ObjectName, ioutil.NopCloser(bytes.NewReader(args.Stream)), args.Gzip)
+	err := Upload(args.BucketID, args.ObjectName, ioutil.NopCloser(bytes.NewReader(args.Stream)), args.Gzip)
 	if err != nil {
 		log.Printf(constant.UploadFail, err)
 		return err
@@ -55,18 +56,18 @@ func (s *OSSService) Upload(args *entity.UploadArgs, reply *api.Result) error {
  * @return error 错误信息
  */
 func (s *OSSService) Download(args *entity.Args, reply *api.Result) error {
-	if err := s.checkArgs(args); err != nil {
+	if err := checkArgs(args); err != nil {
 		log.Println(constant.UploadFail, err)
 		return err
 	}
 	log.Println("rpc方式下载文件", args.BucketID, args.ObjectName)
-	data, _, err := DownloadAttachment(args.BucketID, args.ObjectName)
-	if err != nil {
+	b := &bytes.Buffer{}
+	if err := Download(b, 1, args.BucketID, args.ObjectName); err != nil {
 		log.Println(constant.DownloadFail, err)
 		return err
 	}
 	reply.Error_msg = constant.DownloadSuccess
-	reply.Data = data
+	reply.Data = b
 	return nil
 }
 
@@ -80,12 +81,12 @@ func (s *OSSService) Download(args *entity.Args, reply *api.Result) error {
  * @return error 错误信息
  */
 func (s *OSSService) Delete(args *entity.Args, reply *api.Result) error {
-	if err := s.checkArgs(args); err != nil {
+	if err := checkArgs(args); err != nil {
 		log.Println(constant.UploadFail, err)
 		return err
 	}
 	log.Println("rpc方式删除文件", args.BucketID, args.ObjectName)
-	err := DeleteAttachment(args.BucketID, args.ObjectName)
+	err := Delete(args.BucketID, args.ObjectName)
 	if err != nil {
 		log.Println(constant.DeleteFail, err)
 		return err
@@ -94,15 +95,6 @@ func (s *OSSService) Delete(args *entity.Args, reply *api.Result) error {
 	return nil
 }
 
-func (s *OSSService) checkArgs(args *entity.Args) error {
-	if args.BucketID == "" {
-		return errors.New(api.Error_msg_1002 + "BucketID")
-	} else if args.ObjectName == "" {
-		return errors.New(api.Error_msg_1002 + "ObjectName")
-	}
-	return nil
-}
-
 /* rpc方式获取标讯正文
  * @param args 参数
  * @param args.BucketID 文件名
@@ -114,13 +106,15 @@ func (s *OSSService) checkArgs(args *entity.Args) error {
  * @return error 错误信息
  */
 func (s *OSSService) GetBidDetail(args *entity.Args, reply *api.Result) error {
-	if err := s.checkArgs(args); err != nil {
-		log.Println(constant.BidDetailFail, err)
+	if err := checkArgs(args); err != nil {
+		log.Println(constant.GetBidDetailFail, err)
 		return err
 	}
 	log.Println("rpc方式获取正文", args.BucketID, args.ObjectName)
 	args.ObjectName += ".txt"
-	reply.Data = string(GetBidDetail(args.BucketID, args.ObjectName))
+	data := &strings.Builder{}
+	GetBidDetail(data, args.BucketID, args.ObjectName)
+	reply.Data = data.String()
 	reply.Error_msg = constant.GetBidDetailSuccess
 	return nil
 }