diff --git a/internal/protocol/http/fetcher.go b/internal/protocol/http/fetcher.go index cb8ae1ec..866dc15a 100644 --- a/internal/protocol/http/fetcher.go +++ b/internal/protocol/http/fetcher.go @@ -128,7 +128,7 @@ func (f *Fetcher) Resolve(req *base.Request) error { contentDisposition := httpResp.Header.Get(base.HttpHeaderContentDisposition) if contentDisposition != "" { _, params, _ := mime.ParseMediaType(contentDisposition) - filename := params["filePath"] + filename := params["filename"] if filename != "" { file.Name = filename } diff --git a/internal/protocol/http/fetcher_test.go b/internal/protocol/http/fetcher_test.go index def01f3e..f9290b19 100644 --- a/internal/protocol/http/fetcher_test.go +++ b/internal/protocol/http/fetcher_test.go @@ -15,7 +15,7 @@ import ( ) func TestFetcher_Resolve(t *testing.T) { - testResolve(test.StartTestFileServer, &base.Resource{ + testResolve(test.StartTestFileServer, test.BuildName, &base.Resource{ Name: test.BuildName, Size: test.BuildSize, Range: true, @@ -26,7 +26,18 @@ func TestFetcher_Resolve(t *testing.T) { }, }, }, t) - testResolve(test.StartTestChunkedServer, &base.Resource{ + testResolve(test.StartTestCustomServer, "disposition", &base.Resource{ + Name: test.BuildName, + Size: test.BuildSize, + Range: false, + Files: []*base.FileInfo{ + { + Name: test.BuildName, + Size: test.BuildSize, + }, + }, + }, t) + testResolve(test.StartTestCustomServer, test.BuildName, &base.Resource{ Name: test.BuildName, Size: 0, Range: false, @@ -39,12 +50,12 @@ func TestFetcher_Resolve(t *testing.T) { }, t) } -func testResolve(startTestServer func() net.Listener, want *base.Resource, t *testing.T) { +func testResolve(startTestServer func() net.Listener, path string, want *base.Resource, t *testing.T) { listener := startTestServer() defer listener.Close() fetcher := buildFetcher() err := fetcher.Resolve(&base.Request{ - URL: "http://" + listener.Addr().String() + "/" + test.BuildName, + URL: "http://" + listener.Addr().String() + "/" + path, }) if err != nil { t.Fatal(err) @@ -75,7 +86,7 @@ func TestFetcher_DownloadContinue(t *testing.T) { } func TestFetcher_DownloadChunked(t *testing.T) { - listener := test.StartTestChunkedServer() + listener := test.StartTestCustomServer() defer listener.Close() // chunked编码下载 downloadNormal(listener, 1, t) diff --git a/internal/test/httptest.go b/internal/test/httptest.go index 0a371a43..7f6aab47 100644 --- a/internal/test/httptest.go +++ b/internal/test/httptest.go @@ -46,7 +46,7 @@ func StartTestSlowFileServer(delay time.Duration) net.Listener { }) } -func StartTestChunkedServer() net.Listener { +func StartTestCustomServer() net.Listener { return startTestServer(func() http.Handler { mux := http.NewServeMux() mux.HandleFunc("/"+BuildName, func(writer http.ResponseWriter, request *http.Request) { @@ -57,6 +57,17 @@ func StartTestChunkedServer() net.Listener { defer file.Close() io.Copy(writer, file) }) + mux.HandleFunc("/disposition", func(writer http.ResponseWriter, request *http.Request) { + writer.Header().Set("Content-Disposition", "attachment; filename=\""+BuildName+"\"") + writer.Header().Set("Content-Type", "application/octet-stream") + writer.Header().Set("Content-Length", fmt.Sprintf("%d", BuildSize)) + file, err := os.Open(BuildFile) + if err != nil { + panic(err) + } + defer file.Close() + io.Copy(writer, file) + }) return mux }) }