golangWebDav多目录文件服务的实现

作者:

文章目录
  • package main import ( “net/http” “golang.org/x/net/webdav” ) func main() { http.ListenAndServe(“:8080”, &webdav.Handler{ FileSystem: webdav.Dir(“.”), LockSystem: webdav.NewMemLS(), }) }
  • 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 } // 验证用户名/密码 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() } 到此这篇关于golang WebDav 多目录文件服务的实现的文章就介绍到这了,更多相关golang WebDav 多目录文件内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: 使用Go语言实现的WebDAV内存文件系统
  • 目录
    • 普通WebDav服务
    • 一个端口共享多用户/多目录

    golang官方提供了webdav服务包,但是,功能比较有限,这里主要针对一个端口,多目录做解释

    package main
    
    import (
        "net/http"
        "golang.org/x/net/webdav"
    )
    
    func main() {
        http.ListenAndServe(":8080", &webdav.Handler{
            FileSystem: webdav.Dir("."),
            LockSystem: webdav.NewMemLS(),
        })
    }
    

    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
    		}
    		// 验证用户名/密码
    		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()
    }
    

    到此这篇关于golang WebDav 多目录文件服务的实现的文章就介绍到这了,更多相关golang WebDav 多目录文件内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • 使用Go语言实现的WebDAV内存文件系统

    站内搜索