2017-06-15 139 views
1

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

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

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:]) 
}) 
+0

出了什么问题查找从Request.URL.Path文件名? – Volker

+0

它给了我“慢/ one.json /”,我需要从根服务文件。 –

+3

如何使用strings.Split()函数并从根构造文件路径? – rnk

回答

1

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

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

Playground link

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) 
}