diff options
Diffstat (limited to 'internal/api/client/fileserver/servefile.go')
-rw-r--r-- | internal/api/client/fileserver/servefile.go | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/internal/api/client/fileserver/servefile.go b/internal/api/client/fileserver/servefile.go index 0caa81926..5a884dc47 100644 --- a/internal/api/client/fileserver/servefile.go +++ b/internal/api/client/fileserver/servefile.go @@ -19,7 +19,7 @@ package fileserver import ( - "bytes" + "io" "net/http" "github.com/gin-gonic/gin" @@ -91,6 +91,15 @@ func (m *FileServer) ServeFile(c *gin.Context) { return } + defer func() { + // if the content is a ReadCloser, close it when we're done + if closer, ok := content.Content.(io.ReadCloser); ok { + if err := closer.Close(); err != nil { + l.Errorf("error closing readcloser: %s", err) + } + } + }() + // TODO: if the requester only accepts text/html we should try to serve them *something*. // This is mostly needed because when sharing a link to a gts-hosted file on something like mastodon, the masto servers will // attempt to look up the content to provide a preview of the link, and they ask for text/html. @@ -100,5 +109,5 @@ func (m *FileServer) ServeFile(c *gin.Context) { return } - c.DataFromReader(http.StatusOK, content.ContentLength, format, bytes.NewReader(content.Content), nil) + c.DataFromReader(http.StatusOK, content.ContentLength, format, content.Content, nil) } |