建立自己的网络磁盘 Webdav

网络磁盘的好处,在于你可以随时随地,任何一台电脑上修改自己的文件。

首先,我利用Pi3在家中,利用电信宽带,安装好webdav的服务。

我已经申请好了外网IP。它是动态IP,于是申请绑定了域名。

在win10系统中“添加一个网络位置”即可。

为了简单,放弃了安全问题,程序是http服务。所以需要让win10的webdav同时支持http和https:

1 打开注册表编辑器 regedit

2 在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters位置,修改BasicAuthLevel 值改成2

3 重启服务:

net stop webclient

net start webclient


// 简单的webdav服务,开放当前目录,密码在程序中

package main

import (
	"flag"
	"fmt"
	"golang.org/x/net/webdav"
	"net/http"
)

func main() {
	var addr *string
	var path *string
	//
	addr = flag.String("addr", ":8282", "")
	path = flag.String("path", ".", "")
	flag.Parse()

    fs := &webdav.Handler{
		FileSystem: webdav.Dir(*path),
		LockSystem: webdav.NewMemLS(),
	}
	http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
		// 获取用户名/密码
		username, password, ok := req.BasicAuth()
		if !ok {
			w.Header().Set("WWW-Authenticate", `Basic realm="Restricted"`)
			w.WriteHeader(http.StatusUnauthorized)
			return
		}
		// 验证用户名/密码
		if username != "user" || password != "mima" {
			http.Error(w, "WebDAV: need authorized!", http.StatusUnauthorized)
			return
		}
		fs.ServeHTTP(w, req)
	})
	fmt.Println("addr=", *addr, ", path=", *path)
	http.ListenAndServe(*addr, nil)
}