diff --git a/CHANGELOG.md b/CHANGELOG.md index 627b1a1b742f3c4f9cc3eb6b27e4d423740f79f7..582fafee930bfde390450d56cc2d00bc4ed424c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), * Fixed photo oEmbed URL previews (Giphy). * Fixed orientation parsing for some thumbnails. * Fixed file name being incorrect on the first download from remote servers. +* Fixed a download inefficiency where remote downloads could use extra bandwidth. ## [1.2.4] - March 5th, 2021 diff --git a/controllers/download_controller/download_resource_handler.go b/controllers/download_controller/download_resource_handler.go index cbaad5d7cc35de91da8d401d12ddd6b45f14f7be..1c8ef15ba89ed5e287a4e47225e80939fa6f1ff2 100644 --- a/controllers/download_controller/download_resource_handler.go +++ b/controllers/download_controller/download_resource_handler.go @@ -134,7 +134,18 @@ func downloadResourceWorkFn(request *resource_handler.WorkRequest) interface{} { persistFile := func(fileStream io.ReadCloser) *workerDownloadResponse { defer cleanup.DumpAndCloseStream(fileStream) userId := upload_controller.NoApplicableUploadUser - media, err := upload_controller.StoreDirect(nil, fileStream, downloaded.ContentLength, downloaded.ContentType, downloaded.DesiredFilename, userId, info.origin, info.mediaId, common.KindRemoteMedia, ctx, true) + + ms := stream.NewMemStream() + io.Copy(ms, fileStream) + ms.Close() + + st, err := ms.NextReader() + if err != nil { + ctx.Log.Error("Unexpected error persisting file: ", err) + return &workerDownloadResponse{err: err} + } + + media, err := upload_controller.StoreDirect(nil, st, downloaded.ContentLength, downloaded.ContentType, downloaded.DesiredFilename, userId, info.origin, info.mediaId, common.KindRemoteMedia, ctx, true) if err != nil { ctx.Log.Error("Error persisting file: ", err) return &workerDownloadResponse{err: err} @@ -145,6 +156,7 @@ func downloadResourceWorkFn(request *resource_handler.WorkRequest) interface{} { media: media, contentType: media.ContentType, filename: media.UploadName, + stream: ms, } }