package back import ( "os" "github.com/gin-gonic/gin" ) func prepareRouterDocument() { router.POST("/document-insert", handlerDocumentInsert) } func handlerDocumentInsert(c *gin.Context) { man := getManagerFromContext(c) if man == nil { c.JSON(200, gin.H{ "Error": "Отказано в доступе", }) return } if man.Role != "__admin" { c.JSON(200, gin.H{ "Error": "Отказано в доступе", }) return } form, e := c.MultipartForm() if e != nil { logger.Println(e) c.JSON(200, gin.H{ "Error": "Невозможно обработать данные", }) return } var caption, extension string if len(form.Value["Caption"]) == 1 { caption = form.Value["Caption"][0] } if len(form.Value["Extension"]) == 1 { extension = form.Value["Extension"][0] } if len(form.File["File"]) != 1 { logger.Println("Количество файлов для загрузки " + string(len(form.File["File"]))) c.JSON(200, gin.H{ "Error": "Невозможно загрузить файл", }) return } hash, e := GenerateHash(caption) if e != nil { logger.Println(e) c.JSON(200, gin.H{ "Error": "Невозможно создать имя файла", }) return } _, e = os.Stat(Setting.Docs) if os.IsNotExist(e) { e = os.MkdirAll(Setting.Docs, 0777) if e != nil { logger.Println(e) c.JSON(200, gin.H{ "Error": "Невозможно создать каталог для зранения файлов", }) return } } file := form.File["File"][0] filename := hash + "." + extension e = c.SaveUploadedFile(file, Setting.Docs+filename) if e != nil { logger.Println(e) c.JSON(200, gin.H{ "Error": "Неудалось сохранить файл на диске сервера", }) return } doc := document{} doc.Caption = caption doc.Extension = extension doc.Link = hash doc.Manager = man.ID e = doc.Insert() if e != nil { logger.Println(e) c.JSON(200, gin.H{ "Error": "Неудалось добваить документ в базу данных", }) e = os.RemoveAll(Setting.Docs + filename) if e != nil { logger.Println("ERROR: ", e) } return } c.JSON(200, gin.H{ "Error": nil, "ID": doc.ID, }) }