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.

114 lignes
2.4KB

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