Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

123 lines
2.6KB

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