mirror of
1
Fork 0

serve HEAD requests via the fileserver (#735)

This commit is contained in:
tobi 2022-07-30 14:42:47 +02:00 committed by GitHub
parent 72650e49f7
commit 8fdc9ed552
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 7 deletions

View File

@ -59,5 +59,6 @@ func (m *FileServer) Route(s router.Router) error {
// something like "/fileserver/:account_id/:media_type/:media_size/:file_name" // something like "/fileserver/:account_id/:media_type/:media_size/:file_name"
fileServePath := fmt.Sprintf("%s/:%s/:%s/:%s/:%s", FileServeBasePath, AccountIDKey, MediaTypeKey, MediaSizeKey, FileNameKey) fileServePath := fmt.Sprintf("%s/:%s/:%s/:%s/:%s", FileServeBasePath, AccountIDKey, MediaTypeKey, MediaSizeKey, FileNameKey)
s.AttachHandler(http.MethodGet, fileServePath, m.ServeFile) s.AttachHandler(http.MethodGet, fileServePath, m.ServeFile)
s.AttachHandler(http.MethodHead, fileServePath, m.ServeFile)
return nil return nil
} }

View File

@ -22,6 +22,7 @@ import (
"fmt" "fmt"
"io" "io"
"net/http" "net/http"
"strconv"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/superseriousbusiness/gotosocial/internal/api" "github.com/superseriousbusiness/gotosocial/internal/api"
@ -107,11 +108,18 @@ func (m *FileServer) ServeFile(c *gin.Context) {
return return
} }
c.DataFromReader(http.StatusOK, content.ContentLength, format, content.Content, map[string]string{
// since we'll never host different files at the same // since we'll never host different files at the same
// URL (bc the ULIDs are generated per piece of media), // URL (bc the ULIDs are generated per piece of media),
// it's sensible and safe to use a long cache here, so // it's sensible and safe to use a long cache here, so
// that clients don't keep fetching files over + over again // that clients don't keep fetching files over + over again
"Cache-Control": "max-age=604800", c.Header("Cache-Control", "max-age=604800")
})
if c.Request.Method == http.MethodHead {
c.Header("Content-Type", format)
c.Header("Content-Length", strconv.FormatInt(content.ContentLength, 10))
c.Status(http.StatusOK)
return
}
c.DataFromReader(http.StatusOK, content.ContentLength, format, content.Content, nil)
} }