1
0
mirror of https://github.com/astaxie/beego.git synced 2025-06-12 08:30:40 +00:00

accept encoding refactor and bug fixed

This commit is contained in:
JessonChan
2015-11-10 10:55:47 +08:00
parent dc28e37606
commit 3872c48349
5 changed files with 174 additions and 75 deletions

View File

@ -15,9 +15,8 @@
package context
import (
"beego/acceptencoder"
"bytes"
"compress/flate"
"compress/gzip"
"encoding/json"
"encoding/xml"
"errors"
@ -55,25 +54,12 @@ func (output *BeegoOutput) Header(key, val string) {
// it sends out response body directly.
func (output *BeegoOutput) Body(content []byte) {
outputWriter := output.Context.ResponseWriter.(io.Writer)
if output.EnableGzip == true && output.Context.Input.Header("Accept-Encoding") != "" {
splitted := strings.SplitN(output.Context.Input.Header("Accept-Encoding"), ",", -1)
encodings := make([]string, len(splitted))
for i, val := range splitted {
encodings[i] = strings.TrimSpace(val)
}
for _, val := range encodings {
if val == "gzip" {
output.Header("Content-Encoding", "gzip")
outputWriter, _ = gzip.NewWriterLevel(output.Context.ResponseWriter, gzip.BestSpeed)
break
} else if val == "deflate" {
output.Header("Content-Encoding", "deflate")
outputWriter, _ = flate.NewWriter(output.Context.ResponseWriter, flate.BestSpeed)
break
}
}
var encoding string
if output.EnableGzip {
encoding = acceptencoder.ParseEncoding(output.Context.Input.Request)
}
if b, n, _ := acceptencoder.WriteBody(encoding, outputWriter, content); b {
output.Header("Content-Encoding", n)
} else {
output.Header("Content-Length", strconv.Itoa(len(content)))
}
@ -84,14 +70,6 @@ func (output *BeegoOutput) Body(content []byte) {
output.Context.ResponseWriter.WriteHeader(output.Status)
output.Status = 0
}
outputWriter.Write(content)
switch outputWriter.(type) {
case *gzip.Writer:
outputWriter.(*gzip.Writer).Close()
case *flate.Writer:
outputWriter.(*flate.Writer).Close()
}
}
// Cookie sets cookie value via given key.