utils.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "io"
  6. "io/ioutil"
  7. "log"
  8. "net/http"
  9. "net/url"
  10. "os"
  11. "path"
  12. "strings"
  13. "time"
  14. . "github.com/linxGnu/goseaweedfs"
  15. )
  16. // 判断文件夹是否存在
  17. func PathExists(path string) (bool, error) {
  18. _, err := os.Stat(path)
  19. if err == nil {
  20. return true, nil
  21. }
  22. if os.IsNotExist(err) {
  23. return false, nil
  24. }
  25. return false, err
  26. }
  27. func CreatePath(path string) (bool, error) {
  28. exist, err := PathExists(path)
  29. if err != nil {
  30. return false, err
  31. }
  32. if exist {
  33. return true, nil
  34. } else {
  35. // 创建文件夹
  36. err := os.Mkdir(path, os.ModePerm)
  37. if err != nil {
  38. return false, err
  39. } else {
  40. return true, err
  41. }
  42. }
  43. }
  44. func DownloadFile(durl string, destFileName string, filePath string) {
  45. uri, err := url.ParseRequestURI(durl)
  46. if err != nil {
  47. panic("网址错误")
  48. }
  49. var filename string
  50. if destFileName == "" {
  51. filename = path.Base(uri.Path)
  52. } else {
  53. filename = filePath + "/" + destFileName
  54. CreatePath(filePath)
  55. }
  56. log.Println("[*] Filename " + filename)
  57. client := http.DefaultClient
  58. client.Timeout = time.Second * 60 //设置超时时间
  59. resp, err := client.Get(durl)
  60. if err != nil {
  61. log.Println("[*] download error:", err)
  62. panic(err)
  63. }
  64. if resp.ContentLength <= 0 {
  65. log.Println("[*] Destination server does not support breakpoint download.")
  66. }
  67. raw := resp.Body
  68. defer raw.Close()
  69. file, err := os.Create(filename)
  70. defer file.Close()
  71. writer := bufio.NewWriter(file)
  72. defer writer.Flush()
  73. body, err := ioutil.ReadAll(raw)
  74. writer.Write(body)
  75. if err != nil {
  76. panic(err)
  77. }
  78. }
  79. func uploadFile(DocFilePath string, fileUpServer string, fileDownServer string) (string, error) {
  80. //6. 上传文件到文件服务器
  81. //DocFilePath := utils.Cfg.MustValue("file", "docDir") + entrustId + "/" + tmpDocName
  82. var sw *Seaweed
  83. var filer []string
  84. if _filer := os.Getenv("GOSWFS_FILER_URL"); _filer != "" {
  85. filer = []string{_filer}
  86. }
  87. sw = NewSeaweed("http", fileUpServer, filer, 2*1024*1024, 5*time.Minute)
  88. _, _, fID, err := sw.UploadFile(DocFilePath, "", "")
  89. log.Println("FID = ", fID)
  90. log.Println("err = ", err)
  91. retDocUrl := fileDownServer + "/" + fID
  92. //6.1 删除本地文件,释放空间
  93. os.Remove(DocFilePath)
  94. //7. 保存住报告URL(由controller层调用生成或修改生成报告记录)
  95. return retDocUrl, err
  96. }
  97. //参数字符串拆分
  98. func getParams(params string) map[string]string {
  99. m := make(map[string]string)
  100. params = strings.Replace(params, "petrotool://", "", -1)
  101. params = strings.Replace(params, "/", "", -1)
  102. paramAry := strings.Split(params, "&")
  103. for _, v := range paramAry {
  104. kv := strings.Split(v, "=")
  105. m[kv[0]] = kv[1]
  106. }
  107. return m
  108. }
  109. func Copy(src, dst string) (int64, error) {
  110. sourceFileStat, err := os.Stat(src)
  111. if err != nil {
  112. return 0, err
  113. }
  114. if !sourceFileStat.Mode().IsRegular() {
  115. return 0, fmt.Errorf("%s is not a regular file", src)
  116. }
  117. source, err := os.Open(src)
  118. if err != nil {
  119. return 0, err
  120. }
  121. defer source.Close()
  122. if ret, _ := PathExists(dst); !ret {
  123. os.Remove(dst)
  124. }
  125. destination, err := os.Create(dst)
  126. if err != nil {
  127. return 0, err
  128. }
  129. defer destination.Close()
  130. nBytes, err := io.Copy(destination, source)
  131. return nBytes, err
  132. }