diff options
author | 2022-02-19 11:44:56 +0100 | |
---|---|---|
committer | 2022-02-19 11:44:56 +0100 | |
commit | 23034ec145662b9edcd98df3a570e968389e3fa8 (patch) | |
tree | bb5678a1fae1c70a8a49b58ce17c5d51eae8710c /internal/api/client/fileserver | |
parent | Use type=email for email input (#400) (diff) | |
download | gotosocial-23034ec145662b9edcd98df3a570e968389e3fa8.tar.xz |
[feature] Stream files via reader (#404)
* serve files via reader rather than byte slice
* close readcloser when we're done with it
* cast reader to readcloser
Diffstat (limited to 'internal/api/client/fileserver')
-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) } |