mirror of https://github.com/perkeep/perkeep.git
get handler: still set content-type text/plain when it's a small all-utf-8 blob (for JSON metadata)
Change-Id: I8a55bb44199c015515ea3aa46f912d8d5a472a5c
This commit is contained in:
parent
bdb54d7cef
commit
c5df8cf7b6
|
@ -29,6 +29,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
"unicode/utf8"
|
||||||
|
|
||||||
"camlistore.org/pkg/auth"
|
"camlistore.org/pkg/auth"
|
||||||
"camlistore.org/pkg/blobref"
|
"camlistore.org/pkg/blobref"
|
||||||
|
@ -37,8 +38,9 @@ import (
|
||||||
"camlistore.org/pkg/misc/httprange" // TODO: delete this package, use http.ServeContent
|
"camlistore.org/pkg/misc/httprange" // TODO: delete this package, use http.ServeContent
|
||||||
)
|
)
|
||||||
|
|
||||||
var kGetPattern *regexp.Regexp = regexp.MustCompile(`/camli/([a-z0-9]+)-([a-f0-9]+)$`)
|
var kGetPattern = regexp.MustCompile(`/camli/` + blobref.Pattern + `$`)
|
||||||
|
|
||||||
|
// Handler is the HTTP handler for serving GET requests of blobs.
|
||||||
type Handler struct {
|
type Handler struct {
|
||||||
Fetcher blobref.StreamingFetcher
|
Fetcher blobref.StreamingFetcher
|
||||||
AllowGlobalAccess bool
|
AllowGlobalAccess bool
|
||||||
|
@ -124,11 +126,27 @@ func serveBlobRef(conn http.ResponseWriter, req *http.Request,
|
||||||
remainBytes = reqRange.LimitBytes()
|
remainBytes = reqRange.LimitBytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
conn.Header().Set("Content-Type", "application/octet-stream")
|
||||||
if reqRange.IsWholeFile() {
|
if reqRange.IsWholeFile() {
|
||||||
conn.Header().Set("Content-Length", strconv.FormatInt(size, 10))
|
conn.Header().Set("Content-Length", strconv.FormatInt(size, 10))
|
||||||
|
// If it's small and all UTF-8, assume it's text and
|
||||||
|
// just render it in the browser. This is more for
|
||||||
|
// demos/debuggability than anything else. It isn't
|
||||||
|
// part of the spec.
|
||||||
|
if size <= 32<<10 {
|
||||||
|
var buf bytes.Buffer
|
||||||
|
_, err := io.Copy(&buf, input)
|
||||||
|
if err != nil {
|
||||||
|
httputil.ServerError(conn, req, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if utf8.Valid(buf.Bytes()) {
|
||||||
|
conn.Header().Set("Content-Type", "text/plain; charset=utf-8")
|
||||||
|
}
|
||||||
|
input = &buf
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
conn.Header().Set("Content-Type", "application/octet-stream")
|
|
||||||
if !reqRange.IsWholeFile() {
|
if !reqRange.IsWholeFile() {
|
||||||
conn.Header().Set("Content-Range",
|
conn.Header().Set("Content-Range",
|
||||||
fmt.Sprintf("bytes %d-%d/%d", reqRange.SkipBytes(),
|
fmt.Sprintf("bytes %d-%d/%d", reqRange.SkipBytes(),
|
||||||
|
|
Loading…
Reference in New Issue