webdav.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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. 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("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. db.Update("fileitem",
  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. }},
  79. true,
  80. false,
  81. )
  82. }
  83. }
  84. }
  85. }
  86. // downloadRemoteExcelFile
  87. func downloadRemoteExcelFile(webdav, user, secert, remote string) {
  88. log.Println("准备下载 ", remote)
  89. // //TODO 创建本地目录
  90. // dir, err := os.Getwd()
  91. // if err != nil {
  92. // log.Println(err)
  93. // return
  94. // }
  95. // path := filepath.Join(dir, "attaches")
  96. // if _, err := os.Stat(path); err != nil {
  97. // os.MkdirAll(path, 0777)
  98. // }
  99. client := gowebdav.NewAuthClient(webdav, gowebdav.NewAutoAuth(user, secert))
  100. client.Connect()
  101. fs, err := client.ReadDir(remote)
  102. if err != nil {
  103. log.Println(err)
  104. return
  105. }
  106. for _, f := range fs {
  107. fn := f.Name()
  108. ext := strings.ToLower(filepath.Ext(fn))
  109. if ext == ".xls" || ext == ".xlsx" {
  110. fpath := strings.ReplaceAll(filepath.Join(remote, fn), "\\", "/")
  111. log.Println(fpath)
  112. // reader, err := client.ReadStream(fpath)
  113. // if err != nil {
  114. // log.Println(err)
  115. // continue
  116. // }
  117. // fo, err := os.OpenFile(filepath.Join(path, fn), os.O_CREATE|os.O_RDWR|os.O_SYNC|os.O_TRUNC, 0777)
  118. // if err != nil {
  119. // log.Println(err)
  120. // continue
  121. // }
  122. // io.Copy(fo, reader)
  123. // reader.Close()
  124. // fo.Close()
  125. } else {
  126. log.Println("跳过 " + fn)
  127. }
  128. }
  129. log.Println("下载完成")
  130. //reloadFilelistData()
  131. }