diff options
author | Christopher Speller <crspeller@gmail.com> | 2018-07-26 10:52:24 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-26 10:52:24 -0700 |
commit | 90e5e279c175b238d58432acb5eb6422ddfe22e7 (patch) | |
tree | 0fc73fc058225ca7a889e85126a866e5612a8fa5 /api4 | |
parent | bae26ec268aef4e85d5055f1b83c6b3992bf178f (diff) | |
download | chat-90e5e279c175b238d58432acb5eb6422ddfe22e7.tar.gz chat-90e5e279c175b238d58432acb5eb6422ddfe22e7.tar.bz2 chat-90e5e279c175b238d58432acb5eb6422ddfe22e7.zip |
Fix file streaming to close files. (#9168)
Diffstat (limited to 'api4')
-rw-r--r-- | api4/file.go | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/api4/file.go b/api4/file.go index dba8b8649..3c0944b89 100644 --- a/api4/file.go +++ b/api4/file.go @@ -160,6 +160,7 @@ func getFile(c *Context, w http.ResponseWriter, r *http.Request) { c.Err.StatusCode = http.StatusNotFound return } + defer fileReader.Close() err = writeFileResponse(info.Name, info.MimeType, info.Size, fileReader, forceDownload, w, r) if err != nil { @@ -195,10 +196,16 @@ func getFileThumbnail(c *Context, w http.ResponseWriter, r *http.Request) { return } - if fileReader, err := c.App.FileReader(info.ThumbnailPath); err != nil { + fileReader, err := c.App.FileReader(info.ThumbnailPath) + if err != nil { c.Err = err c.Err.StatusCode = http.StatusNotFound - } else if err := writeFileResponse(info.Name, THUMBNAIL_IMAGE_TYPE, 0, fileReader, forceDownload, w, r); err != nil { + return + } + defer fileReader.Close() + + err = writeFileResponse(info.Name, THUMBNAIL_IMAGE_TYPE, 0, fileReader, forceDownload, w, r) + if err != nil { c.Err = err return } @@ -264,10 +271,15 @@ func getFilePreview(c *Context, w http.ResponseWriter, r *http.Request) { return } - if fileReader, err := c.App.FileReader(info.PreviewPath); err != nil { + fileReader, err := c.App.FileReader(info.PreviewPath) + if err != nil { c.Err = err c.Err.StatusCode = http.StatusNotFound - } else if err := writeFileResponse(info.Name, PREVIEW_IMAGE_TYPE, 0, fileReader, forceDownload, w, r); err != nil { + } + defer fileReader.Close() + + err = writeFileResponse(info.Name, PREVIEW_IMAGE_TYPE, 0, fileReader, forceDownload, w, r) + if err != nil { c.Err = err return } @@ -325,10 +337,15 @@ func getPublicFile(c *Context, w http.ResponseWriter, r *http.Request) { return } - if fileReader, err := c.App.FileReader(info.Path); err != nil { + fileReader, err := c.App.FileReader(info.Path) + if err != nil { c.Err = err c.Err.StatusCode = http.StatusNotFound - } else if err := writeFileResponse(info.Name, info.MimeType, info.Size, fileReader, true, w, r); err != nil { + } + defer fileReader.Close() + + err = writeFileResponse(info.Name, info.MimeType, info.Size, fileReader, true, w, r) + if err != nil { c.Err = err return } |