webdav.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. // webdav
  2. // 远程文件下载
  3. package main
  4. import (
  5. "fmt"
  6. "log"
  7. "path/filepath"
  8. "strings"
  9. "time"
  10. "github.com/studio-b12/gowebdav"
  11. )
  12. var filenum = 0
  13. // 获取数据目录
  14. func getRemoteFilePath(webdav, user, secert, remote string) {
  15. log.Println("准备下载 ", remote, cf.YusuanInfo)
  16. client := gowebdav.NewAuthClient(webdav, gowebdav.NewAutoAuth(user, secert))
  17. client.Connect()
  18. // 获取根目录列表
  19. entries, err := client.ReadDir(remote)
  20. if err != nil {
  21. log.Fatal(err)
  22. }
  23. // 遍历目录结构
  24. for _, entry := range entries {
  25. log.Println(remote + "/" + entry.Name())
  26. if entry.IsDir() {
  27. // 如果是目录,则递归遍历子目录
  28. readDirRecursive(client, remote+"/"+entry.Name())
  29. }
  30. }
  31. log.Println(fmt.Sprintf("读取文件总数量为:%d", filenum))
  32. }
  33. // 递归遍历目录结构
  34. func readDirRecursive(client *gowebdav.Client, path string) {
  35. filenum = 0 //重置数量
  36. entries, err := client.ReadDir(path)
  37. if err != nil {
  38. log.Fatal(err)
  39. }
  40. for _, entry := range entries {
  41. if entry.IsDir() {
  42. // 如果是目录,则递归遍历子目录
  43. readDirRecursive(client, path+"/"+entry.Name())
  44. } else {
  45. if filenum%1000 == 0 {
  46. log.Println(fmt.Sprintf("已读取文件数量:%d,当前路径为:%s", filenum, path))
  47. }
  48. filenum++
  49. file_path := path + "/" + entry.Name()
  50. sp1 := strings.Split(file_path, "/")
  51. sp2 := strings.Split(entry.Name(), ".")
  52. if len(sp2) < 2 || len(sp1) < 3 {
  53. log.Println(file_path)
  54. db.Update(fmt.Sprintf("%s_err", cf.YusuanInfo),
  55. map[string]interface{}{"file_path": file_path},
  56. map[string]interface{}{
  57. "$set": map[string]interface{}{
  58. "file_name": entry.Name(),
  59. "file_path": file_path,
  60. }},
  61. true,
  62. false,
  63. )
  64. } else {
  65. db.Update(cf.YusuanInfo,
  66. map[string]interface{}{"file_path": file_path},
  67. map[string]interface{}{
  68. "$set": map[string]interface{}{
  69. "file_name": entry.Name(),
  70. "file_path": file_path,
  71. "file_size": entry.Size(),
  72. "file_time": entry.ModTime().Format("2006-01-02 15:04:05"),
  73. "file_type": sp2[1],
  74. "year": sp1[0],
  75. "area": sp1[1],
  76. "city": sp1[2],
  77. "updatetime": time.Now().Unix(),
  78. // "publish_org_type":
  79. }},
  80. true,
  81. false,
  82. )
  83. }
  84. }
  85. }
  86. }
  87. // downloadRemoteExcelFile
  88. func downloadRemoteExcelFile(webdav, user, secert, remote string) {
  89. log.Println("准备下载 ", remote)
  90. // //TODO 创建本地目录
  91. // dir, err := os.Getwd()
  92. // if err != nil {
  93. // log.Println(err)
  94. // return
  95. // }
  96. // path := filepath.Join(dir, "attaches")
  97. // if _, err := os.Stat(path); err != nil {
  98. // os.MkdirAll(path, 0777)
  99. // }
  100. client := gowebdav.NewAuthClient(webdav, gowebdav.NewAutoAuth(user, secert))
  101. client.Connect()
  102. fs, err := client.ReadDir(remote)
  103. if err != nil {
  104. log.Println(err)
  105. return
  106. }
  107. for _, f := range fs {
  108. fn := f.Name()
  109. ext := strings.ToLower(filepath.Ext(fn))
  110. if ext == ".xls" || ext == ".xlsx" {
  111. fpath := strings.ReplaceAll(filepath.Join(remote, fn), "\\", "/")
  112. log.Println(fpath)
  113. // reader, err := client.ReadStream(fpath)
  114. // if err != nil {
  115. // log.Println(err)
  116. // continue
  117. // }
  118. // fo, err := os.OpenFile(filepath.Join(path, fn), os.O_CREATE|os.O_RDWR|os.O_SYNC|os.O_TRUNC, 0777)
  119. // if err != nil {
  120. // log.Println(err)
  121. // continue
  122. // }
  123. // io.Copy(fo, reader)
  124. // reader.Close()
  125. // fo.Close()
  126. } else {
  127. log.Println("跳过 " + fn)
  128. }
  129. }
  130. log.Println("下载完成")
  131. //reloadFilelistData()
  132. }