Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

145 lignes
3.0KB

  1. package main
  2. import (
  3. "crypto/md5"
  4. "fmt"
  5. "io"
  6. "io/ioutil"
  7. "log"
  8. "os"
  9. "strings"
  10. "path/filepath"
  11. filetype "gopkg.in/h2non/filetype.v1"
  12. )
  13. func getFileSize(s string) (size int64, err error) {
  14. f, err := os.Open(s)
  15. if err != nil {
  16. size = 0
  17. return
  18. }
  19. fi, err := f.Stat()
  20. if err == nil {
  21. size = fi.Size()
  22. } else {
  23. size = 0
  24. }
  25. return
  26. }
  27. // not able to detect audio/amr and requries linux local dependency, not good
  28. // func getFileMime(s string) (mimetype string, err error) {
  29. // if err := magicmime.Open(magicmime.MAGIC_MIME_TYPE | magicmime.MAGIC_SYMLINK | magicmime.MAGIC_ERROR); err != nil {
  30. // log.Fatal(err)
  31. // return "", err
  32. // }
  33. // defer magicmime.Close()
  34. // mimetype, err = magicmime.TypeByFile(s)
  35. // if err != nil {
  36. // log.Fatalf("error occured during type lookup: %v", err)
  37. // }
  38. // //log.Printf("mime-type: %v", mimetype)
  39. // return
  40. // }
  41. func getFileMime(s string) (mimetype string, ext string, err error) {
  42. buf, _ := ioutil.ReadFile(s)
  43. kind, unkwown := filetype.Match(buf)
  44. if unkwown != nil {
  45. fmt.Printf("Unkwown: %s", unkwown)
  46. return
  47. }
  48. mimetype = kind.MIME.Value
  49. ext = kind.Extension
  50. //fmt.Printf("File type: %s. MIME: %s\n", kind.Extension, kind.MIME.Value)
  51. return
  52. }
  53. func isMP3(path string) bool {
  54. mime, ext, err := getFileMime(path)
  55. if err != nil {
  56. return false
  57. }
  58. check1 := strings.EqualFold("mp3", ext)
  59. check2 := strings.EqualFold("audio/mpeg", mime)
  60. return check1 && check2
  61. }
  62. func isAmr(path string) bool {
  63. mime, ext, err := getFileMime(path)
  64. if err != nil {
  65. return false
  66. }
  67. check1 := strings.EqualFold("amr", ext)
  68. check2 := strings.EqualFold("audio/amr", mime)
  69. return check1 && check2
  70. }
  71. func isMP4(path string) bool {
  72. mime, ext, err := getFileMime(path)
  73. if err != nil {
  74. return false
  75. }
  76. check1 := strings.EqualFold("mp4", ext)
  77. check2 := strings.EqualFold("video/mp4", mime)
  78. return check1 && check2
  79. }
  80. func isJPG(path string) bool {
  81. mime, ext, err := getFileMime(path)
  82. if err != nil {
  83. return false
  84. }
  85. check1 := strings.EqualFold("jpg", ext)
  86. check2 := strings.EqualFold("image/jpeg", mime)
  87. return check1 && check2
  88. }
  89. //get file Info for uploading CRM attachment /files
  90. func getFileInfo4CRM(path string) (info crmFileInfo, err error) {
  91. info.Name = filepath.Base(path) + filepath.Ext(path)
  92. info.Type, _, err = getFileMime(path)
  93. info.Size, err = getFileSize(path)
  94. return
  95. }
  96. func isFileExist(path string) bool {
  97. if _, err := os.Stat(path); os.IsNotExist(err) {
  98. // path/to/whatever does not exist
  99. return false
  100. }
  101. return true
  102. }
  103. func ensurePathExist(path string) {
  104. d := filepath.Dir(path)
  105. if !isFileExist(d) {
  106. log.Println("Creating path [" + d + "]")
  107. os.MkdirAll(d, 0700)
  108. }
  109. }
  110. func md5File(path string) (md5str string) {
  111. f, err := os.Open(path)
  112. if err != nil {
  113. log.Println(err)
  114. return
  115. }
  116. defer f.Close()
  117. h := md5.New()
  118. if _, err := io.Copy(h, f); err != nil {
  119. log.Fatal(err)
  120. }
  121. return fmt.Sprintf("%x", h.Sum(nil))
  122. }
  123. func md5CompFile(path1, path2 string) (same bool) {
  124. return md5File(path1) == md5File(path2)
  125. }