sharepoint.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package office
  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. //
  38. func (m *SPConf) DownloadFileByRelativeURL(relativeURL, targetPath string) error {
  39. // Getting auth params and client
  40. err := m.GetAuthClient()
  41. if err != nil {
  42. log.Fatalln(err)
  43. }
  44. // Binding SharePoint API
  45. sp := api.NewSP(m.SPC)
  46. data, err := sp.Web().GetFile(relativeURL).Download()
  47. if err != nil {
  48. log.Printf("Download file error : %v\n", err)
  49. return err
  50. }
  51. file, err := os.Create(filepath.Join(targetPath, filepath.Base(relativeURL)))
  52. if err != nil {
  53. log.Printf("unable to create a file: %v\n", err)
  54. return err
  55. }
  56. defer file.Close()
  57. _, err = file.Write(data)
  58. if err != nil {
  59. log.Printf("unable to write to file: %v\n", err)
  60. return err
  61. }
  62. file.Sync()
  63. return nil
  64. }
  65. // @title UploadFile
  66. // @description 上传本地文件到sharepoint服务器
  67. // @auth ila 2021-11-10
  68. // @param folder sharepoint相对路径,filePath 本地文件完整路径,targetName 线上文件名
  69. // @return error 是否成功
  70. func (m *SPConf) UploadFile(folder, filePath, targetName string) error {
  71. // Getting auth params and client
  72. err := m.GetAuthClient()
  73. if err != nil {
  74. log.Fatalln(err)
  75. }
  76. // Binding SharePoint API
  77. sp := api.NewSP(m.SPC)
  78. fdr := sp.Web().GetFolder(folder)
  79. content, err := ioutil.ReadFile(filePath)
  80. if err != nil {
  81. log.Printf("ReadFile error: %v\n", err)
  82. return err
  83. }
  84. fileAddResp, err := fdr.Files().Add(targetName, content, true) //是否覆盖
  85. if err != nil {
  86. log.Printf("NewFile upload error: %v\n", err)
  87. return err
  88. }
  89. log.Printf("New file URL : %s\n", fileAddResp.Data().ServerRelativeURL)
  90. return nil
  91. }