文件操作
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

191 lines
3.2 KiB

3 years ago
  1. // error debug
  2. package file
  3. import (
  4. "errors"
  5. "io"
  6. "io/ioutil"
  7. "net/http"
  8. "os"
  9. //"os/exec"
  10. "path"
  11. "path/filepath"
  12. //"runtime"
  13. "log"
  14. "strings"
  15. )
  16. /**
  17. * 文件下载
  18. * param url 要下载的文件URL
  19. * param filename 文件保存路径或文件保存名称
  20. */
  21. func DownloadFile(url, filename string) error {
  22. if url == "" {
  23. return errors.New("文件下载地址为空")
  24. }
  25. //判断filename是路径还是文件名
  26. fileIndex := strings.Index(filename, ".")
  27. var filePath string
  28. if fileIndex < 1 { //名称是路径
  29. index := strings.Index(url, "?")
  30. if index > 0 {
  31. url1 := url[0:index]
  32. index2 := strings.LastIndex(url1, "/")
  33. //修改此处index2为index2+1,不然多了一个多余的/
  34. fileName := url1[index2+1:]
  35. filePath = strings.TrimRight(filename, "/") + "/" + fileName
  36. } else {
  37. fileName := path.Base(url) //获取文件名带后缀
  38. filePath = strings.TrimRight(filename, "/") + "/" + fileName
  39. }
  40. } else {
  41. filePath = filename
  42. }
  43. res, err := http.Get(url)
  44. if err != nil {
  45. return err
  46. }
  47. dir, _ := filepath.Split(filePath)
  48. CreatePath(dir)
  49. file, err := os.Create(filePath)
  50. if err != nil {
  51. return err
  52. }
  53. _, copyerr := io.Copy(file, res.Body)
  54. if copyerr != nil {
  55. return err
  56. }
  57. return nil
  58. }
  59. /**
  60. * 获取远程接口信息
  61. */
  62. func Geturl(url string) ([]byte, error) {
  63. resp, err := http.Get(url)
  64. if err != nil {
  65. return []byte(""), err
  66. }
  67. defer resp.Body.Close()
  68. body, err := ioutil.ReadAll(resp.Body)
  69. if err != nil {
  70. return []byte(""), err
  71. }
  72. return body, nil
  73. }
  74. /**
  75. * 文件是否存在
  76. */
  77. func FileExists(path string) (bool, error) {
  78. _, err := os.Stat(path)
  79. if err == nil {
  80. return true, nil
  81. }
  82. if os.IsNotExist(err) {
  83. return false, nil
  84. }
  85. return false, err
  86. }
  87. // Copy a file
  88. func Cpfile(originalFilePath, newFilePath string) error {
  89. // Open original file
  90. originalFile, err := os.Open(originalFilePath)
  91. if err != nil {
  92. return err
  93. }
  94. defer originalFile.Close()
  95. // Create new file
  96. newFile, err := os.Create(newFilePath)
  97. if err != nil {
  98. return err
  99. }
  100. defer newFile.Close()
  101. // Copy the bytes to destination from source
  102. _, err = io.Copy(newFile, originalFile)
  103. if err != nil {
  104. return err
  105. }
  106. // Commit the file contents
  107. // Flushes memory to disk
  108. err = newFile.Sync()
  109. if err != nil {
  110. return err
  111. }
  112. return nil
  113. }
  114. func WriteFile(filePath, data string) error {
  115. fileExist, err := FileExists(filePath)
  116. if err != nil {
  117. return err
  118. }
  119. var f *os.File
  120. if fileExist { //如果文件存在
  121. f, err = os.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) //打开文件
  122. } else {
  123. f, err = os.Create(filePath) //创建文件
  124. }
  125. if err != nil {
  126. return err
  127. }
  128. _, err = io.WriteString(f, data) //写入文件(字符串)
  129. if err != nil {
  130. return err
  131. }
  132. return nil
  133. }
  134. /**
  135. * read file
  136. */
  137. func ReadFile(path string) string {
  138. fi, err := os.Open(path)
  139. if err != nil {
  140. return ""
  141. }
  142. defer fi.Close()
  143. fd, err := ioutil.ReadAll(fi)
  144. return string(fd)
  145. }
  146. /**
  147. *读取文件内容(返回字符串)
  148. */
  149. func GetFileContent(FilePath string) string {
  150. buf, err := ioutil.ReadFile(FilePath)
  151. if err != nil {
  152. log.Println("ERROR", "read file error", FilePath, err)
  153. return ""
  154. }
  155. return string(buf)
  156. }