123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- // 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()
- }
|