/* * webdav上传 */ package main import ( "flag" "fmt" "io/ioutil" "log" "os" "strconv" "github.com/studio-b12/gowebdav" ) var ( davurl = flag.String("dav", "https://cloudreve.jydev.jianyu360.com/dav", "dav地址") user = flag.String("user", "jichunling@topnet.net.cn", "用户") password = flag.String("password", "imq6aZfwvWdu9XRsd368uywaalD5Jgwf", "密码") localdir = flag.String("local", "./attaches", "本地目录") remotedir = flag.String("remote", "/%s/北京/东城区/政府", "远程目录") limitMiniFileSize = flag.Int64("minisize", 1024, "最小文件大小,不小于1Kb") client *gowebdav.Client ) // init func init() { flag.Parse() client = gowebdav.NewAuthClient(*davurl, gowebdav.NewAutoAuth(*user, *password)) err := client.Connect() if err != nil { log.Fatal(err) } } // main func main() { //TODO 遍历目录 years := []string{"2022", "2023", "2024"} for _, y := range years { //建立远程目录 rdir := fmt.Sprintf(*remotedir, y+"年") log.Println("上传到远端目录:", rdir) if _, err := client.Stat(rdir); err != nil { if err = client.MkdirAll(rdir, 0644); err != nil { log.Fatal(err) } } //遍历目录 fs, err := ioutil.ReadDir(*localdir) if err != nil { log.Fatal(err) } for _, f := range fs { prefix := f.Name()[:4] if _, err := strconv.Atoi(prefix); err == nil && prefix == y { log.Println(f.Name()) //上传文件 localFilePath := fmt.Sprintf("%s/%s", *localdir, f.Name()) remoteFilePath := fmt.Sprintf("%s/%s", rdir, f.Name()) //TODO 检查文件大小 if fi, err := os.Stat(localFilePath); err == nil && fi.Size() <= *limitMiniFileSize { log.Println("\t 文件太小:", fi.Size()) os.Remove(localFilePath) } else if err != nil { log.Println("\t error: ", err.Error()) os.Remove(localFilePath) continue } fi, err := os.Open(localFilePath) if err != nil { log.Println(err.Error()) continue } if err = client.WriteStream(remoteFilePath, fi, 0644); err != nil { log.Println(err.Error()) continue } else { os.Remove(localFilePath) } } } } log.Println("所有文件上传完毕") }