router_document.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package back
  2. import (
  3. "os"
  4. "github.com/gin-gonic/gin"
  5. )
  6. func prepareRouterDocument() {
  7. router.POST("/document-insert", handlerDocumentInsert)
  8. }
  9. func handlerDocumentInsert(c *gin.Context) {
  10. man := getManagerFromContext(c)
  11. if man == nil {
  12. c.JSON(200, gin.H{
  13. "Error": "Отказано в доступе",
  14. })
  15. return
  16. }
  17. if man.Role != "__admin" {
  18. c.JSON(200, gin.H{
  19. "Error": "Отказано в доступе",
  20. })
  21. return
  22. }
  23. form, e := c.MultipartForm()
  24. if e != nil {
  25. logger.Println(e)
  26. c.JSON(200, gin.H{
  27. "Error": "Невозможно обработать данные",
  28. })
  29. return
  30. }
  31. var caption, extension string
  32. if len(form.Value["Caption"]) == 1 {
  33. caption = form.Value["Caption"][0]
  34. }
  35. if len(form.Value["Extension"]) == 1 {
  36. extension = form.Value["Extension"][0]
  37. }
  38. if len(form.File["File"]) != 1 {
  39. logger.Println("Количество файлов для загрузки " + string(len(form.File["File"])))
  40. c.JSON(200, gin.H{
  41. "Error": "Невозможно загрузить файл",
  42. })
  43. return
  44. }
  45. hash, e := GenerateHash(caption)
  46. if e != nil {
  47. logger.Println(e)
  48. c.JSON(200, gin.H{
  49. "Error": "Невозможно создать имя файла",
  50. })
  51. return
  52. }
  53. _, e = os.Stat(Setting.Docs)
  54. if os.IsNotExist(e) {
  55. e = os.MkdirAll(Setting.Docs, 0777)
  56. if e != nil {
  57. logger.Println(e)
  58. c.JSON(200, gin.H{
  59. "Error": "Невозможно создать каталог для зранения файлов",
  60. })
  61. return
  62. }
  63. }
  64. file := form.File["File"][0]
  65. filename := hash + "." + extension
  66. e = c.SaveUploadedFile(file, Setting.Docs+filename)
  67. if e != nil {
  68. logger.Println(e)
  69. c.JSON(200, gin.H{
  70. "Error": "Неудалось сохранить файл на диске сервера",
  71. })
  72. return
  73. }
  74. doc := document{}
  75. doc.Caption = caption
  76. doc.Extension = extension
  77. doc.Link = hash
  78. doc.Manager = man.ID
  79. e = doc.Insert()
  80. if e != nil {
  81. logger.Println(e)
  82. c.JSON(200, gin.H{
  83. "Error": "Неудалось добваить документ в базу данных",
  84. })
  85. e = os.RemoveAll(Setting.Docs + filename)
  86. if e != nil {
  87. logger.Println("ERROR: ", e)
  88. }
  89. return
  90. }
  91. c.JSON(200, gin.H{
  92. "Error": nil,
  93. "ID": doc.ID,
  94. })
  95. }