summaryrefslogtreecommitdiff
path: root/internal/api/client/fileserver
diff options
context:
space:
mode:
Diffstat (limited to 'internal/api/client/fileserver')
-rw-r--r--internal/api/client/fileserver/fileserver.go1
-rw-r--r--internal/api/client/fileserver/servefile.go22
2 files changed, 16 insertions, 7 deletions
diff --git a/internal/api/client/fileserver/fileserver.go b/internal/api/client/fileserver/fileserver.go
index 1a140e86d..dcb54f986 100644
--- a/internal/api/client/fileserver/fileserver.go
+++ b/internal/api/client/fileserver/fileserver.go
@@ -59,5 +59,6 @@ func (m *FileServer) Route(s router.Router) error {
// something like "/fileserver/:account_id/:media_type/:media_size/:file_name"
fileServePath := fmt.Sprintf("%s/:%s/:%s/:%s/:%s", FileServeBasePath, AccountIDKey, MediaTypeKey, MediaSizeKey, FileNameKey)
s.AttachHandler(http.MethodGet, fileServePath, m.ServeFile)
+ s.AttachHandler(http.MethodHead, fileServePath, m.ServeFile)
return nil
}
diff --git a/internal/api/client/fileserver/servefile.go b/internal/api/client/fileserver/servefile.go
index fffa15a1c..0858af3ce 100644
--- a/internal/api/client/fileserver/servefile.go
+++ b/internal/api/client/fileserver/servefile.go
@@ -22,6 +22,7 @@ import (
"fmt"
"io"
"net/http"
+ "strconv"
"github.com/gin-gonic/gin"
"github.com/superseriousbusiness/gotosocial/internal/api"
@@ -107,11 +108,18 @@ func (m *FileServer) ServeFile(c *gin.Context) {
return
}
- c.DataFromReader(http.StatusOK, content.ContentLength, format, content.Content, map[string]string{
- // since we'll never host different files at the same
- // URL (bc the ULIDs are generated per piece of media),
- // it's sensible and safe to use a long cache here, so
- // that clients don't keep fetching files over + over again
- "Cache-Control": "max-age=604800",
- })
+ // since we'll never host different files at the same
+ // URL (bc the ULIDs are generated per piece of media),
+ // it's sensible and safe to use a long cache here, so
+ // that clients don't keep fetching files over + over again
+ 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)
}