Skip to content

Commit 0ed6f24

Browse files
authored
Merge pull request #8 from xxcheng123/develop
Develop
2 parents 0e45216 + 6508333 commit 0ed6f24

5 files changed

Lines changed: 25 additions & 590 deletions

File tree

go.mod

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ require (
1414
github.com/patrickmn/go-cache v2.1.0+incompatible
1515
github.com/pkg/errors v0.9.1
1616
github.com/xxcheng123/cloudpan189-interface v1.0.1
17-
github.com/xxcheng123/multistreamer v1.0.0
17+
github.com/xxcheng123/multistreamer v1.0.1
1818
github.com/zeromicro/go-zero v1.8.5
1919
go.uber.org/zap v1.27.0
2020
golang.org/x/sync v0.16.0
@@ -49,7 +49,6 @@ require (
4949
github.com/modern-go/reflect2 v1.0.2 // indirect
5050
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
5151
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
52-
github.com/sirupsen/logrus v1.9.3 // indirect
5352
github.com/spaolacci/murmur3 v1.1.0 // indirect
5453
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
5554
github.com/ugorji/go/codec v1.2.12 // indirect

go.sum

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,6 @@ github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P
113113
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
114114
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
115115
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
116-
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
117-
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
118116
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
119117
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
120118
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -137,8 +135,8 @@ github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65E
137135
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
138136
github.com/xxcheng123/cloudpan189-interface v1.0.1 h1:ZYiso8ZWoep8vtYNUClPogZBR8OV1Mw7Tk3lbO6nBLI=
139137
github.com/xxcheng123/cloudpan189-interface v1.0.1/go.mod h1:HhJAEtxYzq9dZxprvOBaIdBkwKT7iY+cBiJ4/BsRntw=
140-
github.com/xxcheng123/multistreamer v1.0.0 h1:zoazyKQL3UBcjR6L7Q/2R/t4AA3FDDggYeYZ0HFDAK8=
141-
github.com/xxcheng123/multistreamer v1.0.0/go.mod h1:xHxsd9eOTNJi1wMrBS2iTrwVVAseotSBMEbE9CHmtOg=
138+
github.com/xxcheng123/multistreamer v1.0.1 h1:xjwyYMtaTzq7uxcZleu88ofEGmiE0AEpaAydePEPGBs=
139+
github.com/xxcheng123/multistreamer v1.0.1/go.mod h1:o86TuPGDbxqBrd2NIEr1uv67yFhrQUVh/FPO0uGvyTs=
142140
github.com/zeromicro/go-zero v1.8.5 h1:YkdQhYllE+BPOrxcni0oCewebs7qHfXvjN9glnpcmJQ=
143141
github.com/zeromicro/go-zero v1.8.5/go.mod h1:P0DKW1vJx+2J3TReptbeg0H9tRSvehymr0HX4SCfZ6g=
144142
go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
@@ -166,7 +164,6 @@ golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
166164
golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
167165
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
168166
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
169-
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
170167
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
171168
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
172169
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

internal/services/universalfs/service_file_download.go

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -131,50 +131,40 @@ func (s *service) doResponse(ctx *gin.Context, url string) {
131131
if shared.Setting.MultipleStream {
132132
ctx.Header("X-Transfer-Type", "multi_stream")
133133

134-
opts := []multistreamer.OptionFunc{
135-
multistreamer.WithHeader(ctx.Request.Header),
136-
multistreamer.WithContext(ctx),
137-
}
138-
139-
httpCode := http.StatusOK
134+
httpReq := ctx.Request.Header.Clone()
135+
httpReq.Set("Accept-Encoding", "identity")
136+
httpReq.Del("Content-Type")
140137

141-
rangeSpec, yes, err := multistreamer.ParseRangeHeader(ctx.Request.Header.Get("Range"))
138+
streamer, err := multistreamer.NewStreamer(ctx, url, httpReq, multistreamer.WithLogger(s.logger))
142139
if err != nil {
140+
s.logger.Error("初始化失败", zap.Error(err), zap.String("url", url))
141+
143142
ctx.JSON(http.StatusInternalServerError, gin.H{
144143
"code": http.StatusInternalServerError,
145-
"message": fmt.Sprintf("解析Range失败: %v", err),
144+
"message": fmt.Sprintf("初始化失败: %v", err),
146145
})
146+
147147
return
148-
} else if yes {
149-
opts = append(opts, multistreamer.WithRange(rangeSpec.Start, rangeSpec.End))
150-
httpCode = http.StatusPartialContent
151148
}
152149

153-
mt := multistreamer.New(url, ctx.Writer, opts...)
154-
155-
if err = mt.Init(); err != nil {
156-
ctx.JSON(http.StatusInternalServerError, gin.H{
157-
"code": http.StatusInternalServerError,
158-
"message": fmt.Sprintf("启动失败: %v", err),
159-
})
160-
return
150+
for k, v := range streamer.GetResponseHeader() {
151+
ctx.Header(k, v[0])
161152
}
162153

163-
if header, err := mt.GetResponseHeader(); err != nil {
164-
ctx.JSON(http.StatusInternalServerError, gin.H{
165-
"code": http.StatusInternalServerError,
166-
"message": fmt.Sprintf("获取响应头失败: %v", err),
167-
})
168-
return
169-
} else {
170-
for k, v := range header {
171-
ctx.Header(k, v[0])
154+
ctx.Status(streamer.HTTPCode())
155+
156+
if err = streamer.Transfer(ctx, ctx.Writer); err != nil {
157+
if s.isConnectionError(err) {
158+
s.logger.Info("客户端连接断开",
159+
zap.String("url", url),
160+
)
161+
} else {
162+
s.logger.Error("文件下载转发失败",
163+
zap.Error(err),
164+
zap.String("url", url),
165+
)
172166
}
173167
}
174-
175-
ctx.Status(httpCode)
176-
_ = mt.Execute()
177-
178168
} else if shared.Setting.LocalProxy {
179169
s.handleLocalProxy(ctx, url)
180170
} else {

0 commit comments

Comments
 (0)