webdav.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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)
  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. entries, err := client.ReadDir(path)
  36. if err != nil {
  37. log.Fatal(err)
  38. }
  39. for _, entry := range entries {
  40. if entry.IsDir() {
  41. // 如果是目录,则递归遍历子目录
  42. readDirRecursive(client, path+"/"+entry.Name())
  43. } else {
  44. if filenum%1000 == 0 {
  45. log.Println(fmt.Sprintf("已读取文件数量:%d,当前路径为:%s", filenum, path))
  46. }
  47. filenum++
  48. file_path := path + "/" + entry.Name()
  49. log.Println(file_path)
  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("fileitem_err",
  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. if file_path == "2022年/陕西省/商洛市/政府/2022_残疾人联合会_1.pdf" {
  66. log.Println("sssssssssssssssssss")
  67. }
  68. db.Update("fileitem",
  69. map[string]interface{}{"file_path": file_path},
  70. map[string]interface{}{
  71. "$set": map[string]interface{}{
  72. "file_name": entry.Name(),
  73. "file_path": file_path,
  74. "file_size": entry.Size(),
  75. "file_time": entry.ModTime().Format("2006-01-02 15:04:05"),
  76. "file_type": sp2[1],
  77. "year": sp1[0],
  78. "area": sp1[1],
  79. "city": sp1[2],
  80. "updatetime": time.Now().Unix(),
  81. }},
  82. true,
  83. false,
  84. )
  85. }
  86. }
  87. }
  88. }
  89. // downloadRemoteExcelFile
  90. func downloadRemoteExcelFile(webdav, user, secert, remote string) {
  91. log.Println("准备下载 ", remote)
  92. // //TODO 创建本地目录
  93. // dir, err := os.Getwd()
  94. // if err != nil {
  95. // log.Println(err)
  96. // return
  97. // }
  98. // path := filepath.Join(dir, "attaches")
  99. // if _, err := os.Stat(path); err != nil {
  100. // os.MkdirAll(path, 0777)
  101. // }
  102. client := gowebdav.NewAuthClient(webdav, gowebdav.NewAutoAuth(user, secert))
  103. client.Connect()
  104. fs, err := client.ReadDir(remote)
  105. if err != nil {
  106. log.Println(err)
  107. return
  108. }
  109. for _, f := range fs {
  110. fn := f.Name()
  111. ext := strings.ToLower(filepath.Ext(fn))
  112. if ext == ".xls" || ext == ".xlsx" {
  113. fpath := strings.ReplaceAll(filepath.Join(remote, fn), "\\", "/")
  114. log.Println(fpath)
  115. // reader, err := client.ReadStream(fpath)
  116. // if err != nil {
  117. // log.Println(err)
  118. // continue
  119. // }
  120. // fo, err := os.OpenFile(filepath.Join(path, fn), os.O_CREATE|os.O_RDWR|os.O_SYNC|os.O_TRUNC, 0777)
  121. // if err != nil {
  122. // log.Println(err)
  123. // continue
  124. // }
  125. // io.Copy(fo, reader)
  126. // reader.Close()
  127. // fo.Close()
  128. } else {
  129. log.Println("跳过 " + fn)
  130. }
  131. }
  132. log.Println("下载完成")
  133. //reloadFilelistData()
  134. }