你可以使用以下代码来实现对URL中文件名字的获取和发送文件给请求方:
package main
import (
"io"
"log"
"net/http"
"os"
"path/filepath"
)
func downloadFileHandler(w http.ResponseWriter, r *http.Request) {
filename := filepath.Base(r.URL.Path) // 从URL中获取文件名
filepath := "./" + filename // 拼接完整的文件路径,保存在当前目录下
file, err := os.Open(filepath)
if err != nil {
log.Println(err)
w.WriteHeader(http.StatusInternalServerError)
return
}
defer file.Close()
stat, err := file.Stat()
if err != nil {
log.Println(err)
w.WriteHeader(http.StatusInternalServerError)
return
}
w.Header().Set("Content-Disposition", "attachment; filename="+filename)
w.Header().Set("Content-Type", "application/octet-stream")
w.Header().Set("Content-Length", string(stat.Size()))
io.Copy(w, file)
log.Printf("File sent: %s\n", filepath)
}
func main() {
http.HandleFunc("/", downloadFileHandler)
log.Println("Server started on port 9999")
err := http.ListenAndServe("10.10.60.113:9999", nil)
if err != nil {
log.Fatal(err)
}
}
这个示例代码会监听IP地址为10.10.60.113
,端口号为9999
的HTTP请求。当收到GET请求时,会从URL中获取到要下载的文件名字,并根据该名字拼接完整的文件路径。然后通过HTTP响应将该文件发送给请求方。
注意修改代码中的IP地址和端口号以适配你的实际环境。确保该IP和端口没有被其他程序占用,并且请求方能够访问到该IP地址和端口号。在当前目录下放置要下载的文件,并使用http://10.10.60.113:9999/xxx
的形式访问服务器来下载相应的文件,其中xxx
为要下载的文件名字。
内容由零声教学AI助手提供,问题来源于学员提问