main.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*
  2. *
  3. webdav上传
  4. */
  5. package main
  6. import (
  7. "flag"
  8. "fmt"
  9. "io/ioutil"
  10. "log"
  11. "os"
  12. "strconv"
  13. "github.com/studio-b12/gowebdav"
  14. )
  15. var (
  16. davurl = flag.String("dav", "https://cloudreve.jydev.jianyu360.com/dav", "dav地址")
  17. user = flag.String("user", "jichunling@topnet.net.cn", "用户")
  18. password = flag.String("password", "imq6aZfwvWdu9XRsd368uywaalD5Jgwf", "密码")
  19. localdir = flag.String("local", "./attaches", "本地目录")
  20. remotedir = flag.String("remote", "/%s/北京/东城区/政府", "远程目录")
  21. limitMiniFileSize = flag.Int64("minisize", 1024, "最小文件大小,不小于1Kb")
  22. client *gowebdav.Client
  23. )
  24. // init
  25. func init() {
  26. flag.Parse()
  27. client = gowebdav.NewAuthClient(*davurl, gowebdav.NewAutoAuth(*user, *password))
  28. err := client.Connect()
  29. if err != nil {
  30. log.Fatal(err)
  31. }
  32. }
  33. // main
  34. func main() {
  35. //TODO 遍历目录
  36. years := []string{"2022", "2023", "2024"}
  37. for _, y := range years {
  38. //建立远程目录
  39. rdir := fmt.Sprintf(*remotedir, y+"年")
  40. log.Println("上传到远端目录:", rdir)
  41. if _, err := client.Stat(rdir); err != nil {
  42. if err = client.MkdirAll(rdir, 0644); err != nil {
  43. log.Fatal(err)
  44. }
  45. }
  46. //遍历目录
  47. fs, err := ioutil.ReadDir(*localdir)
  48. if err != nil {
  49. log.Fatal(err)
  50. }
  51. for _, f := range fs {
  52. prefix := f.Name()[:4]
  53. if _, err := strconv.Atoi(prefix); err == nil &&
  54. prefix == y {
  55. log.Println(f.Name())
  56. //上传文件
  57. localFilePath := fmt.Sprintf("%s/%s", *localdir, f.Name())
  58. remoteFilePath := fmt.Sprintf("%s/%s", rdir, f.Name())
  59. //TODO 检查文件大小
  60. if fi, err := os.Stat(localFilePath); err == nil && fi.Size() <= *limitMiniFileSize {
  61. log.Println("\t 文件太小:", fi.Size())
  62. os.Remove(localFilePath)
  63. } else if err != nil {
  64. log.Println("\t error: ", err.Error())
  65. os.Remove(localFilePath)
  66. continue
  67. }
  68. fi, err := os.Open(localFilePath)
  69. if err != nil {
  70. log.Println(err.Error())
  71. continue
  72. }
  73. if err = client.WriteStream(remoteFilePath, fi, 0644); err != nil {
  74. log.Println(err.Error())
  75. continue
  76. } else {
  77. os.Remove(localFilePath)
  78. }
  79. }
  80. }
  81. }
  82. log.Println("所有文件上传完毕")
  83. }