第33章 文本请求处理
第33章 文本请求
学习如何在 Iris 中处理文本请求体。
基础文本处理
```go package main
import "github.com/kataras/iris/v12"
func main() { app := iris.New()
app.Post("/text", func(ctx iris.Context) { body := ctx.GetBody() text := string(body)
ctx.JSON(iris.Map{ "received": text, "length": len(text), }) })
app.Listen(":8080") } ```
限制大小读取
```go app.Post("/limited", iris.LimitRequestBodySize(1<<20), func(ctx iris.Context) { body, err := ctx.GetBody() if err != nil { ctx.StopWithError(iris.StatusBadRequest, err) return }
ctx.JSON(iris.Map{ "text": string(body), "size": len(body), }) }) ```
流式读取文本
```go app.Post("/stream", func(ctx iris.Context) { reader := ctx.Request().Body buffer := make([]byte, 1024) content := []byte{}
for { n, err := reader.Read(buffer) if err != nil && err != io.EOF { ctx.StopWithError(iris.StatusInternalServerError, err) return }
if n == 0 { break }
content = append(content, buffer[:n]...) }
ctx.JSON(iris.Map{ "content": string(content), "size": len(content), }) }) ```
最佳实践
校验 - 检查内容类型 - 验证编码 - 设置大小限制 - 处理空请求体 - 清理输入内容
性能 - 使用合适的缓冲区 - 处理大文本 - 监控内存占用 - 实现超时机制 - 及时释放资源
安全 - 校验输入 - 设置大小限制 - 检查编码 - 监控使用情况 - 处理错误
实现 - 处理编码 - 设置超时 - 在文档中说明限制 - 测试边界情况 - 记录问题日志