进阶 www.iris-go.com 2026-10-20 02:39:14 · 13 阅读

第27章 Iris 框架实战:处理 Gzip 压缩请求

Gzip 请求 学习如何在 Iris 中处理 Gzip 压缩请求。 基础 Gzip 处理 ```gopackage main import ( "compress/gzip" "io" "github.com/kataras/iris/v12" ) func main() { app := iris.New() app.Post("/gzip", func(ctx iris.Context) { if ctx.GetHeader("Content-Encoding") != "gzip" { ctx.StopWithStatus(iris.StatusBadRequest) return } reader, err := gzip.NewReader(ctx.Request().Body) if err != nil { ctx.StopWithError(iris.StatusBadRequest, err) return } defer reader.Close() data, err := io.ReadAll(reader) if err != nil { ctx.StopWithError(iris.StatusInternalServerError, err) return } ctx.JSON(iris.Map{ "decompressed_size": len(data), "content": string(data), }) }) app.Listen(":8080") } ``` JSON 与 Gzip ```go type Message struct { Text string `json:"text"` Time int64 `json:"time"` } app.Post("/json-gzip", func(ctx iris.Context) { if ctx.GetHeader("Content-Encoding") != "gzip" { ctx.StopWithStatus(iris.StatusBadRequest) return } reader, err := gzip.NewReader(ctx.Request().Body) if err != nil { ctx.StopWithError(iris.StatusBadRequest, err) return } defer reader.Close() var msg Message if err := json.NewDecoder(reader).Decode(&msg); err != nil { ctx.StopWithError(iris.StatusBadRequest, err) return } ctx.JSON(iris.Map{ "received": msg, }) }) ``` 使用 Gzip 处理大文件上传 goapp.Post("/upload-gzip", iris.LimitRequestBodySize(32<<20), func(ctx iris.Context) { if ctx.GetHeader("Content-Encoding") != "gzip" { ctx.StopWithStatus(iris.StatusBadRequest) return } reader, err := gzip.NewReader(ctx.Request().Body) if err != nil { ctx.StopWithError(iris.StatusBadRequest, err) return } defer reader.Close() // 创建临时文件 tempFile, err := os.CreateTemp("", "upload-*.dat") if err != nil { ctx.StopWithError(iris.StatusInternalServerError, err) return } defer tempFile.Close() // 将解压数据写入文件 written, err := io.Copy(tempFile, reader) if err != nil { ctx.StopWithError(iris.StatusInternalServerError, err) return } ctx.JSON(iris.Map{ "decompressed_size": written, "filename": tempFile.Name(), }) })1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
最佳实践 验证:检查内容编码,验证压缩,设置大小限制,处理格式,监控用量 性能:使用合适缓冲区,处理大数据,监控内存,实现超时,清理资源 安全:验证输入,设置大小限制,检查内容,监控用量,处理错误 错误处理:处理压缩错误,验证内容,记录问题,文档化错误,测试边缘情况

评论 (0)