// webdav // 远程文件下载 package main import ( "fmt" "log" "path/filepath" "strings" "time" "github.com/studio-b12/gowebdav" ) var filenum = 0 // 获取数据目录 func getRemoteFilePath(webdav, user, secert, remote string) { log.Println("准备下载 ", remote) client := gowebdav.NewAuthClient(webdav, gowebdav.NewAutoAuth(user, secert)) client.Connect() // 获取根目录列表 entries, err := client.ReadDir(remote) if err != nil { log.Fatal(err) } // 遍历目录结构 for _, entry := range entries { log.Println(remote + "/" + entry.Name()) if entry.IsDir() { // 如果是目录,则递归遍历子目录 readDirRecursive(client, remote+"/"+entry.Name()) } } log.Println(fmt.Sprintf("读取文件总数量为:%d", filenum)) } // 递归遍历目录结构 func readDirRecursive(client *gowebdav.Client, path string) { entries, err := client.ReadDir(path) if err != nil { log.Fatal(err) } for _, entry := range entries { if entry.IsDir() { // 如果是目录,则递归遍历子目录 readDirRecursive(client, path+"/"+entry.Name()) } else { if filenum%1000 == 0 { log.Println(fmt.Sprintf("已读取文件数量:%d,当前路径为:%s", filenum, path)) } filenum++ file_path := path + "/" + entry.Name() log.Println(file_path) sp1 := strings.Split(file_path, "/") sp2 := strings.Split(entry.Name(), ".") if len(sp2) < 2 || len(sp1) < 3 { log.Println(file_path) db.Update("fileitem_err", map[string]interface{}{"file_path": file_path}, map[string]interface{}{ "$set": map[string]interface{}{ "file_name": entry.Name(), "file_path": file_path, }}, true, false, ) } else { if file_path == "2022年/陕西省/商洛市/政府/2022_残疾人联合会_1.pdf" { log.Println("sssssssssssssssssss") } db.Update("fileitem", map[string]interface{}{"file_path": file_path}, map[string]interface{}{ "$set": map[string]interface{}{ "file_name": entry.Name(), "file_path": file_path, "file_size": entry.Size(), "file_time": entry.ModTime().Format("2006-01-02 15:04:05"), "file_type": sp2[1], "year": sp1[0], "area": sp1[1], "city": sp1[2], "updatetime": time.Now().Unix(), }}, true, false, ) } } } } // downloadRemoteExcelFile func downloadRemoteExcelFile(webdav, user, secert, remote string) { log.Println("准备下载 ", remote) // //TODO 创建本地目录 // dir, err := os.Getwd() // if err != nil { // log.Println(err) // return // } // path := filepath.Join(dir, "attaches") // if _, err := os.Stat(path); err != nil { // os.MkdirAll(path, 0777) // } client := gowebdav.NewAuthClient(webdav, gowebdav.NewAutoAuth(user, secert)) client.Connect() fs, err := client.ReadDir(remote) if err != nil { log.Println(err) return } for _, f := range fs { fn := f.Name() ext := strings.ToLower(filepath.Ext(fn)) if ext == ".xls" || ext == ".xlsx" { fpath := strings.ReplaceAll(filepath.Join(remote, fn), "\\", "/") log.Println(fpath) // reader, err := client.ReadStream(fpath) // if err != nil { // log.Println(err) // continue // } // fo, err := os.OpenFile(filepath.Join(path, fn), os.O_CREATE|os.O_RDWR|os.O_SYNC|os.O_TRUNC, 0777) // if err != nil { // log.Println(err) // continue // } // io.Copy(fo, reader) // reader.Close() // fo.Close() } else { log.Println("跳过 " + fn) } } log.Println("下载完成") //reloadFilelistData() }