context.go
func (ctx *Context) ZipHandler(fileName string, file []byte) {
	zipName := fileName + ".zip"
	rw := ctx.ResponseWriter
	// 设置header信息中的ctontent-type，对于zip可选以下两种
	// rw.Header().Set("Content-Type", "application/octet-stream")
	rw.Header().Set("Content-Type", "application/zip")
	// 设置header信息中的Content-Disposition为attachment类型
	rw.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", zipName))
	// 向rw中写入zip文件
	// 创建zip.Writer
	zipW := zip.NewWriter(rw)
	defer zipW.Close()

	// 向zip中添加文件
	f, err := zipW.Create(fileName)
	if err != nil {
		log.WithFields(log.Fields{"path": ctx.Request.URL.Path}).Warnln(err.Error())
	}
	// 向文件中写入文件内容
	f.Write(file)
}
func (ctx *Context) ZipHandler(fileName string, file []byte) {
	zipName := fileName + ".zip"
	rw := ctx.ResponseWriter
	// 设置header信息中的ctontent-type，对于zip可选以下两种
	// rw.Header().Set("Content-Type", "application/octet-stream")
	rw.Header().Set("Content-Type", "application/zip")
	// 设置header信息中的Content-Disposition为attachment类型
	rw.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", zipName))
	// 向rw中写入zip文件
	// 创建zip.Writer
	zipW := zip.NewWriter(rw)
	defer zipW.Close()

	// 向zip中添加文件
	f, err := zipW.Create(fileName)
	if err != nil {
		log.WithFields(log.Fields{"path": ctx.Request.URL.Path}).Warnln(err.Error())
	}
	// 向文件中写入文件内容
	f.Write(file)
}
//ZipHandler 响应下载文件请求，返回zip文件