Spaces:
Runtime error
Runtime error
| package controllers | |
| import ( | |
| "net/http" | |
| "abdanhafidz.com/go-boilerplate/services" | |
| "github.com/gin-gonic/gin" | |
| ) | |
| type UploadController interface { | |
| UploadMedia(ctx *gin.Context) | |
| } | |
| type uploadController struct { | |
| uploadService services.UploadService | |
| } | |
| func NewUploadController(uploadService services.UploadService) UploadController { | |
| return &uploadController{uploadService: uploadService} | |
| } | |
| // UploadMedia godoc | |
| // @Summary Upload a media file | |
| // @Description Upload an image or file to storage and receive a public URL back. | |
| // @Tags Upload | |
| // @Accept multipart/form-data | |
| // @Produce json | |
| // @Param file formData file true "File to upload" | |
| // @Param folder formData string false "Folder name (default: uploads)" | |
| // @Success 200 {object} map[string]string | |
| // @Failure 400 {object} dto.ErrorResponse | |
| // @Security BearerAuth | |
| // @Router /api/v1/upload [post] | |
| func (c *uploadController) UploadMedia(ctx *gin.Context) { | |
| file, header, err := ctx.Request.FormFile("file") | |
| if err != nil { | |
| ctx.JSON(http.StatusBadRequest, gin.H{"error": "file is required"}) | |
| return | |
| } | |
| defer file.Close() | |
| folder := ctx.PostForm("folder") | |
| if folder == "" { | |
| folder = "uploads" | |
| } | |
| url, err := c.uploadService.UploadFile(file, header, folder) | |
| if err != nil { | |
| ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) | |
| return | |
| } | |
| ctx.JSON(http.StatusOK, gin.H{"url": url}) | |
| } | |