Skip to content

Commit 8e7f63b

Browse files
authored
Merge pull request #28802 from paulijar/enh/s3_seek_from_end
Support seeking also from the end of file on S3 storage
2 parents 1e6e0cf + a335592 commit 8e7f63b

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

lib/private/Files/Stream/SeekableHttpStream.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ public static function open(callable $callback) {
7676
private $current;
7777
/** @var int */
7878
private $offset = 0;
79+
/** @var int */
80+
private $length = 0;
7981

8082
private function reconnect(int $start) {
8183
$range = $start . '-';
@@ -101,12 +103,14 @@ private function reconnect(int $start) {
101103
$content = trim(explode(':', $contentRange)[1]);
102104
$range = trim(explode(' ', $content)[1]);
103105
$begin = intval(explode('-', $range)[0]);
106+
$length = intval(explode('/', $range)[1]);
104107

105108
if ($begin !== $start) {
106109
return false;
107110
}
108111

109112
$this->offset = $begin;
113+
$this->length = $length;
110114

111115
return true;
112116
}
@@ -140,7 +144,12 @@ public function stream_seek($offset, $whence = SEEK_SET) {
140144
}
141145
return $this->reconnect($this->offset + $offset);
142146
case SEEK_END:
143-
return false;
147+
if ($this->length === 0) {
148+
return false;
149+
} elseif ($this->length + $offset === $this->offset) {
150+
return true;
151+
}
152+
return $this->reconnect($this->length + $offset);
144153
}
145154
return false;
146155
}

0 commit comments

Comments
 (0)