sharepoint.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package cmd
  2. import (
  3. "github.com/koltyakov/gosip"
  4. "github.com/koltyakov/gosip/api"
  5. strategy "github.com/koltyakov/gosip/auth/saml"
  6. "io/ioutil"
  7. "log"
  8. "os"
  9. "path/filepath"
  10. )
  11. type SPConf struct {
  12. //ConfFilePath string `json:"conf_file_path"` //sharepoint登录config文件路径
  13. SiteURL string `json:"site_url"`
  14. Username string `json:"username"`
  15. Password string `json:"password"`
  16. SPC *gosip.SPClient `json:"spc"` //客户端认证连接对象
  17. }
  18. func (m *SPConf) GetAuthClient() error {
  19. // configPath := "private.spo-user.json"
  20. //为了安全,把siteurl等通过结构体传入参数
  21. auth := &strategy.AuthCnfg{
  22. SiteURL: m.SiteURL,
  23. Username: m.Username,
  24. Password: m.Password,
  25. }
  26. //if err := auth.ReadConfig(m.ConfFilePath); err != nil {
  27. // return fmt.Errorf("unable to get config: %v", err)
  28. //}
  29. m.SPC = &gosip.SPClient{AuthCnfg: auth}
  30. return nil
  31. }
  32. // @title DownloadFileByRelativeURL
  33. // @description 根据相对url下载
  34. // @auth ila 2021-11-10
  35. // @param relativeURL sharepoint相对URL,targetPath 本地路径
  36. // @return error 是否成功
  37. func (m *SPConf) DownloadFileByRelativeURL(relativeURL, targetPath string) error {
  38. // Getting auth params and client
  39. err := m.GetAuthClient()
  40. if err != nil {
  41. log.Fatalln(err)
  42. }
  43. // Binding SharePoint API
  44. sp := api.NewSP(m.SPC)
  45. data, err := sp.Web().GetFile(relativeURL).Download()
  46. if err != nil {
  47. log.Printf("Download file error : %v\n", err)
  48. return err
  49. }
  50. file, err := os.Create(filepath.Join(targetPath, filepath.Base(relativeURL)))
  51. if err != nil {
  52. log.Printf("unable to create a file: %v\n", err)
  53. return err
  54. }
  55. defer file.Close()
  56. _, err = file.Write(data)
  57. if err != nil {
  58. log.Printf("unable to write to file: %v\n", err)
  59. return err
  60. }
  61. file.Sync()
  62. return nil
  63. }
  64. // @title UploadFile
  65. // @description 上传本地文件到sharepoint服务器
  66. // @auth ila 2021-11-10
  67. // @param folder sharepoint相对路径,filePath 本地文件完整路径,targetName 线上文件名
  68. // @return error 是否成功
  69. func (m *SPConf) UploadFile(folder, filePath, targetName string) error {
  70. // Getting auth params and client
  71. err := m.GetAuthClient()
  72. if err != nil {
  73. log.Fatalln(err)
  74. }
  75. // Binding SharePoint API
  76. sp := api.NewSP(m.SPC)
  77. fdr := sp.Web().GetFolder(folder)
  78. content, err := ioutil.ReadFile(filePath)
  79. if err != nil {
  80. log.Printf("ReadFile error: %v\n", err)
  81. return err
  82. }
  83. fileAddResp, err := fdr.Files().Add(targetName, content, true) //是否覆盖
  84. if err != nil {
  85. log.Printf("NewFile upload error: %v\n", err)
  86. return err
  87. }
  88. log.Printf("New file URL : %s\n", fileAddResp.Data().ServerRelativeURL)
  89. return nil
  90. }