diff options
author | MichaIng <micha@dietpi.com> | 2021-09-21 19:41:07 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-21 19:41:07 +0200 |
commit | 0365d3b5d689e2554c399928576ef9e4bddf532d (patch) | |
tree | 72607b3414f6c887e9519b266c8d7ed240dbd48d /lib | |
parent | 1ede2d555c35d852c01790711697f83f48fdfd0a (diff) | |
parent | 61acaf1fbda8b340efaefff2588bd570c66bfb55 (diff) | |
download | nextcloud-server-0365d3b5d689e2554c399928576ef9e4bddf532d.tar.gz nextcloud-server-0365d3b5d689e2554c399928576ef9e4bddf532d.zip |
Merge pull request #28909 from nextcloud/backport/28802/stable21
[stable21] Support seeking also from the end of file on S3 storage
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Files/Stream/SeekableHttpStream.php | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/private/Files/Stream/SeekableHttpStream.php b/lib/private/Files/Stream/SeekableHttpStream.php index efbfd293ad5..fa6da7a1a53 100644 --- a/lib/private/Files/Stream/SeekableHttpStream.php +++ b/lib/private/Files/Stream/SeekableHttpStream.php @@ -77,6 +77,8 @@ class SeekableHttpStream implements File { private $current; /** @var int */ private $offset = 0; + /** @var int */ + private $length = 0; private function reconnect(int $start) { $range = $start . '-'; @@ -102,12 +104,14 @@ class SeekableHttpStream implements File { $content = trim(explode(':', $contentRange)[1]); $range = trim(explode(' ', $content)[1]); $begin = intval(explode('-', $range)[0]); + $length = intval(explode('/', $range)[1]); if ($begin !== $start) { return false; } $this->offset = $begin; + $this->length = $length; return true; } @@ -141,7 +145,12 @@ class SeekableHttpStream implements File { } return $this->reconnect($this->offset + $offset); case SEEK_END: - return false; + if ($this->length === 0) { + return false; + } elseif ($this->length + $offset === $this->offset) { + return true; + } + return $this->reconnect($this->length + $offset); } return false; } |