golang WebDav 多目錄文件服務(wù)的實(shí)現(xiàn)
golang官方提供了webdav服務(wù)包,但是,功能比較有限,這里主要針對(duì)一個(gè)端口,多目錄做解釋
普通WebDav服務(wù)
package main
import (
"net/http"
"golang.org/x/net/webdav"
)
func main() {
http.ListenAndServe(":8080", &webdav.Handler{
FileSystem: webdav.Dir("."),
LockSystem: webdav.NewMemLS(),
})
}
一個(gè)端口共享多用戶/多目錄
package main
import (
"fmt"
"golang.org/x/net/webdav"
"log"
"net/http"
"strings"
)
func Dav_Load() {
s_mux := http.NewServeMux();
fs := &webdav.Handler{
Prefix: "/dav/",
FileSystem: webdav.Dir("F:/"),
LockSystem: webdav.NewMemLS(),
}
fs2 := &webdav.Handler{
Prefix: "/dav2/",
FileSystem: webdav.Dir("E:/"),
LockSystem: webdav.NewMemLS(),
}
s_mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
//log.Println(req.RequestURI)
// 獲取用戶名/密碼
username, password, ok := req.BasicAuth()
if !ok {
w.Header().Set("WWW-Authenticate", `Basic realm="Restricted"`)
w.WriteHeader(http.StatusUnauthorized)
return
}
// 驗(yàn)證用戶名/密碼
if username != "a" || password != "b" {
http.Error(w, "WebDAV: need authorized!", http.StatusUnauthorized)
return
}
//switch req.Method {
//case "PUT", "DELETE", "PROPPATCH", "MKCOL", "COPY", "MOVE":
// http.Error(w, "WebDAV: Read Only!!!", http.StatusForbidden)
// return
//}
if strings.HasPrefix(req.RequestURI, fs.Prefix) {
fs.ServeHTTP(w, req)
//fmt.Println("fs call")
return
}
if strings.HasPrefix(req.RequestURI, fs2.Prefix) {
fs2.ServeHTTP(w, req)
//fmt.Println("fs2 call")
return
}
// else
w.WriteHeader(404)
})
dav_addr := fmt.Sprintf(":%v", 8082)
log.Println("Dav Server run ", dav_addr)
err := http.ListenAndServe(dav_addr, s_mux)
if (err != nil) {
fmt.Println("dav server run error:", err)
}
}
func main() {
Dav_Load()
}
到此這篇關(guān)于golang WebDav 多目錄文件服務(wù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)golang WebDav 多目錄文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Golang搭建web服務(wù)的實(shí)現(xiàn)步驟
本文主要介紹了使用Golang搭建web服務(wù)的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
Go語言之使用pprof工具查找goroutine(協(xié)程)泄漏
這篇文章主要介紹了Go語言之使用pprof工具查找goroutine(協(xié)程)泄漏,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Go語言實(shí)現(xiàn)對(duì)稱加密和非對(duì)稱加密的示例代碼
本文主要介紹了Go語言實(shí)現(xiàn)對(duì)稱加密和非對(duì)稱加密的示例代碼,通過實(shí)際代碼示例展示了如何在Go中實(shí)現(xiàn)這兩種加密方式,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
Goland配置leetcode的實(shí)現(xiàn)示例
本文主要介紹了Goland配置leetcode的實(shí)現(xiàn)示例,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06

