主頁(yè) > 知識(shí)庫(kù) > 解決golang http.FileServer 遇到的坑

解決golang http.FileServer 遇到的坑

熱門標(biāo)簽:官渡電銷外呼管理系統(tǒng)怎么收費(fèi) 谷歌美發(fā)店地圖標(biāo)注 杭州人工智能電銷機(jī)器人費(fèi)用 貴州電話智能外呼系統(tǒng) 400開(kāi)頭電話怎樣申請(qǐng) 赤峰電銷 利用地圖標(biāo)注位置 江蘇呼叫中心外呼系統(tǒng)有效果嗎 地圖區(qū)域圖標(biāo)注后導(dǎo)出

上次寫了一個(gè)2行實(shí)現(xiàn)一個(gè)靜態(tài)服務(wù)器的文章

今天群里有個(gè)哥們是這么寫居然返回的是404 見(jiàn)鬼了嘛??

http.handle("/js", http.FileServer(http.Dir("js"))

http.ListenAndServe("8080", nil)

大概的意思就是綁定 路由為 js 的時(shí)候訪問(wèn)這個(gè)js 文件夾 看了一下確實(shí)代碼上面沒(méi)什么毛病。但是路徑怎么修改 也不好使。

我把代碼拿到我的 電腦上面運(yùn)行 shitfuck 這是搞什么啊居然出現(xiàn)下面的這個(gè)情況

奇怪居然在我電腦上面也不能執(zhí)行了。莫非我的文件夾權(quán)限有問(wèn)題

給賦值一下 777 權(quán)限 重新運(yùn)行

居然還不好使。來(lái)回改路徑 就這么搗鼓了兩個(gè)小時(shí)無(wú)意中看到一個(gè)文章就是說(shuō)的這個(gè)

加一個(gè)StripPrefix 方法就好了

那這個(gè)玩意是干嘛的呢??纯词謨?cè)

然后我的代碼就變成這個(gè)樣子

http.Handle("/js/", http.StripPrefix("/js/", http.FileServer(http.Dir("js"))))

http.StripPrefix用于過(guò)濾request,參數(shù)里的handler的request過(guò)濾掉特定的前序,只有這樣,才能正確顯示文件目錄。 shitfuck

看一下我的路徑 以及下面存放的文件

修改代碼完成后就這么神奇般的解決了

浪費(fèi)了兩個(gè)小時(shí)不過(guò) 還不錯(cuò)最起碼解決問(wèn)題了。

補(bǔ)充:Golang1.8標(biāo)準(zhǔn)庫(kù)http.Fileserver跟http.ServerFile小例子

我就廢話不多說(shuō)了,大家還是直接看代碼吧~

package main
import (
  "fmt"
  "net/http"
  "os"
  "path"
  "strings"
)
var staticfs = http.FileServer(http.Dir("D:\\code\\20160902\\src\\"))
func main() {
  //瀏覽器打開(kāi)的時(shí)候顯示的就是D:\\code\\20160902\\src\\client目錄下的內(nèi)容"
  http.Handle("/client/", http.FileServer(http.Dir("D:\\code\\20160902\\src\\")))
  http.HandleFunc("/static/", static)
  http.HandleFunc("/js/", js)
  http.HandleFunc("/", route)
  http.ListenAndServe(":1789", nil)
}
func route(w http.ResponseWriter, r *http.Request) {
  fmt.Println(r.URL)
  fmt.Fprintln(w, "welcome")
  r.Body.Close()
}
//這里可以自行定義安全策略
func static(w http.ResponseWriter, r *http.Request) {
  fmt.Printf("訪問(wèn)靜態(tài)文件:%s\n", r.URL.Path)
  old := r.URL.Path
  r.URL.Path = strings.Replace(old, "/static", "/client", 1)
  staticfs.ServeHTTP(w, r)
}
//設(shè)置單文件訪問(wèn),不能訪問(wèn)目錄
func js(w http.ResponseWriter, r *http.Request) {
  fmt.Printf("不能訪問(wèn)目錄:%s\n", r.URL.Path)
  old := r.URL.Path
  name := path.Clean("D:/code/20160902/src" + strings.Replace(old, "/js", "/client", 1))
  info, err := os.Lstat(name)
  if err == nil {
    if !info.IsDir() {
      http.ServeFile(w, r, name)
    } else {
      http.NotFound(w, r)
    }
  } else {
    http.NotFound(w, r)
  }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Golang實(shí)現(xiàn)http server提供壓縮文件下載功能
  • golang語(yǔ)言http協(xié)議get拼接參數(shù)操作
  • Golang 實(shí)現(xiàn)分片讀取http超大文件流和并發(fā)控制
  • 在Golang中使用http.FileServer返回靜態(tài)文件的操作
  • golang HTTP 服務(wù)器 處理 日志/Stream流的操作
  • golang http使用踩過(guò)的坑與填坑指南

標(biāo)簽:武漢 保定 河池 泰安 黔西 松原 鷹潭 宜春

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解決golang http.FileServer 遇到的坑》,本文關(guān)鍵詞  解決,golang,http.FileServer,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《解決golang http.FileServer 遇到的坑》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于解決golang http.FileServer 遇到的坑的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章