Form Data
Learn how to handle form data in Iris.
Basic Form Handling
go
package main
import "github.com/kataras/iris/v12"
func main() {
app := iris.New()
app.Post("/submit", func(ctx iris.Context) {
username := ctx.FormValue("username")
email := ctx.FormValue("email")
ctx.JSON(iris.Map{
"username": username,
"email": email,
})
})
app.Listen(":8080")
}
File Upload
go
app.Post("/upload", iris.LimitRequestBodySize(32<<20), func(ctx iris.Context) {
// Get uploaded file
file, info, err := ctx.FormFile("file")
if err != nil {
ctx.StopWithError(iris.StatusBadRequest, err)
return
}
defer file.Close()
// Save to disk
dest := filepath.Join("./uploads", info.Filename)
ctx.SaveFormFile(info, dest)
ctx.JSON(iris.Map{
"filename": info.Filename,
"size": info.Size,
})
})
Multiple Files
go
app.Post("/upload-multiple", iris.LimitRequestBodySize(64<<20), func(ctx iris.Context) {
// Get uploaded files
form, err := ctx.MultipartForm()
if err != nil {
ctx.StopWithError(iris.StatusBadRequest, err)
return
}
files := form.File["files[]"]
filesInfo := make([]iris.Map, 0)
for _, file := range files {
// Save each file
dest := filepath.Join("./uploads", file.Filename)
ctx.SaveFormFile(file, dest)
filesInfo = append(filesInfo, iris.Map{
"filename": file.Filename,
"size": file.Size,
})
}
ctx.JSON(iris.Map{
"uploaded": len(files),
"files": filesInfo,
})
})
Form Validation
go
type LoginForm struct {
Username string `form:"username" validate:"required,min=3,max=32"`
Password string `form:"password" validate:"required,min=6"`
Email string `form:"email" validate:"required,email"`
}
app.Post("/login", func(ctx iris.Context) {
var form LoginForm
if err := ctx.ReadForm(&form); err != nil {
ctx.StopWithError(iris.StatusBadRequest, err)
return
}
// Validate form
if err := validate.Struct(form); err != nil {
ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
Title("Validation Error").
DetailErr(err))
return
}
ctx.JSON(iris.Map{
"message": "Form validated successfully",
"form": form,
})
})
Best Practices
Validation:
- Validate required fields
- Check field types
- Implement size limits
- Handle file types
- Sanitize input
Security:
- Set upload limits
- Validate file types
- Check file sizes
- Scan for malware
- Store securely
Performance:
- Handle large files
- Use appropriate buffers
- Monitor memory usage
- Clean up resources
- Implement timeouts
Error Handling:
- Provide clear messages
- Handle validation errors
- Log issues
- Clean up on errors
- Document requirements