gpt4 book ai didi

HTTP 服务器和客户端下载多个文件

转载 作者:数据小太阳 更新时间:2023-10-29 03:03:30 29 4
gpt4 key购买 nike

我试过为单个文件设置下载服务器和下载客户端。我如何修改它们以提供/下载目录中的所有文件?

以下是我的服务器和客户端代码:

//server.go
func main() {
http.HandleFunc("/dlpath", handle)
err := http.ListenAndServe(":10001", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}

func handle(writer http.ResponseWriter, r *http.Request) {
filename := "C:\\Users\\aarvi\\GolandProjects\\src\\Practice\\download\\serve\\send.txt"
http.ServeFile(writer, r, filename)
}

//client.go
func main() {
downloadFile("res_out.txt", "http://localhost:10001/dlpath")
}

func downloadFile(dirname string, url string) error {

// Create the file
out, err := os.OpenFile(dirname, os.O_WRONLY | os.O_CREATE | os.O_APPEND, 0666)
if err != nil {
fmt.Println(err)
}
defer out.Close()

// get data
request, err := http.NewRequest("GET", url, nil)
if err != nil {
fmt.Println(err)
}

client := http.Client{}
resp, err := client.Do(request)
if err != nil {
return err
}
defer resp.Body.Close()

// Write the body to file
_, err = io.Copy(out, resp.Body)
if err != nil {
return err
}
return nil
}

我试过像这样在 handle 函数中提供目录:

dirname := "C:\\Users\\aarvi\\GolandProjects\\src\\Practice\\download\\serve"
http.FileServer(http.Dir(dirname))

并试图在客户端打印出响应,但我什么也没得到。如何提供/serve 目录中的所有文件,并在客户端下载它们?

编辑:以下是服务目录的内容:

服务
---样本.txt
---发送.txt
---目录2
------abc.txt

如何在客户端将所有这些文件作为单独的文件下载,目录结构完好无损?

更新:当我直接在主函数中调用 http.Handle 函数(如答案中所述)时,我能够提供所有文件,以及内部目录中的文件.

但是,当我在 handle 函数中调用它时,它没有任何作用。我猜这与路径有关?

最佳答案

问题可能出在您请求的文件路径中。它以 /dlpath/ 为前缀。您必须去除此前缀并将其余文本作为路径传递。请参阅:https://godoc.org/net/http#FileServer

你能试试这个代码片段吗:

package main

import (
"log"
"net/http"
)

func main() {
dirName := "C:\\Users\\aarvi\\GolandProjects\\src\\Practice\\download\\serve"

http.Handle("/dlpath/", http.StripPrefix("/dlpath", http.FileServer(http.Dir(dirName))))

err := http.ListenAndServe(":8001", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}

希望这对您有所帮助。

附言这是您在处理程序函数中提供目录时的情况。

关于HTTP 服务器和客户端下载多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48986310/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com