http.Request:从url获取文件名

时间:2017-06-15 08:55:48

标签: go

如何从以下请求中仅获取文件名one.jsonhttp://localhost/slow/one.json

我只需要从网址提供此文件和其他文件?这是一个我需要响应非常慢的测试服务器。

http.HandleFunc("/slow/", func(w http.ResponseWriter, r *http.Request) {
    log.Println("Slow...")
    log.Println(r.URL.Path[1:])
    time.Sleep(100 * time.Millisecond)
    http.ServeFile(w, r, r.URL.Path[1:])
})

2 个答案:

答案 0 :(得分:4)

我相信你正在寻找path.Base:" Base返回路径的最后一个元素。"

r,_ := http.NewRequest("GET", "http://localhost/slow/one.json", nil)
fmt.Println(path.Base(r.URL.Path))
// one.json

Playground link

答案 1 :(得分:0)

创建了两个文件夹slowfast,然后我最终使用了以下内容:

package main

import (
    "log"
    "net/http"
    "time"
    "fmt"
)

func main() {

    h := http.NewServeMux()

    h.HandleFunc("/fast/", func(w http.ResponseWriter, r *http.Request) {

        fmt.Println(r.URL.Path[1:])
        time.Sleep(100 * time.Millisecond)
        http.ServeFile(w, r, r.URL.Path[1:])

    })

    h.HandleFunc("/slow/", func(w http.ResponseWriter, r *http.Request) {

        fmt.Println(r.URL.Path[1:])
        time.Sleep(6000 * time.Millisecond)
        http.ServeFile(w, r, r.URL.Path[1:])

    })

    h.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.WriteHeader(404)
    })

    err := http.ListenAndServe(":8080", h)
    log.Fatal(err)
}