fix: http filename resolve (#124)

This commit is contained in:
Li Wei authored and GitHub committed 2023-06-28 10:22:45 +08:00
1 parent c651263747
commit 34fc886662
3 files changed
+29 -7

No files matched your search

+1 -1
View File
@@ -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
}
+16 -5
View File
@@ -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)
+12 -1
View File
@@ -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
})
}