Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func (a *ItemController) create(c echo.Context) error {
- cc := c.(*middleware.CustomContext)
- db := cc.DB
- payload := new(itemPayload)
- if validates := util.ValidatePayload(c, payload); !validates {
- return c.NoContent(http.StatusBadRequest)
- }
- // Parse the tags manually, binding doesn't work
- rawTags := cc.FormValue("tags")
- stringTags := strings.Split(rawTags, ",")
- tagIDs := make([]int, 0, len(stringTags))
- for _, t := range stringTags {
- i, err := strconv.ParseInt(t, 10, 64)
- if err != nil {
- continue
- }
- tagIDs = append(tagIDs, int(i))
- }
- fileZip, err := cc.FormFile("zip")
- if err != nil {
- fmt.Println("error opening form file:", err)
- return c.NoContent(http.StatusInternalServerError)
- }
- fileCover, err := cc.FormFile("cover")
- if err != nil {
- fmt.Println("error opening form file:", err)
- return c.NoContent(http.StatusInternalServerError)
- }
- item, err := models.CreateItem(db, payload, tagIDs)
- if err != nil {
- return c.NoContent(http.StatusInternalServerError)
- }
- // Create media dir
- err = os.MkdirAll(item.GetMediaDir(), os.ModePerm)
- if err != nil {
- fmt.Println("error creating item media dir:", err)
- return c.NoContent(http.StatusInternalServerError)
- }
- srcZip, err := fileZip.Open()
- if err != nil {
- return c.NoContent(http.StatusInternalServerError)
- }
- defer srcZip.Close()
- // Copy item files
- dstZip, err := os.Create(item.GetMediaDir() + "files.zip")
- if err != nil {
- return c.NoContent(http.StatusInternalServerError)
- }
- defer dstZip.Close()
- if _, err = io.Copy(dstZip, srcZip); err != nil {
- fmt.Println("error copying srczip to dstzip:", err)
- return c.NoContent(http.StatusInternalServerError)
- }
- // Copy item cover
- srcCover, err := fileCover.Open()
- if err != nil {
- return c.NoContent(http.StatusInternalServerError)
- }
- defer srcCover.Close()
- dstCover, err := os.Create(item.GetMediaDir() + "cover")
- if err != nil {
- return c.NoContent(http.StatusInternalServerError)
- }
- defer dstCover.Close()
- if _, err = io.Copy(dstCover, srcCover); err != nil {
- fmt.Println("error copying srcCover to dstCover:", err)
- return c.NoContent(http.StatusInternalServerError)
- }
- return c.JSON(http.StatusCreated, item)
- }
Advertisement
Add Comment
Please, Sign In to add comment