[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
This commit is contained in:
tobi
2022-02-19 11:44:56 +01:00
committed by GitHub
parent e55382acd6
commit 23034ec145
3 changed files with 21 additions and 7 deletions

View File

@@ -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)
}