aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Files/ObjectStore/S3ObjectTrait.php
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2020-03-19 14:32:25 +0100
committerRobin Appelman <robin@icewind.nl>2020-04-01 15:21:05 +0200
commit7b07e7251c8a92e95da922f34dde158ddffbeeee (patch)
tree3cae032a5965aeb2604896c5aa51f263c33103fb /lib/private/Files/ObjectStore/S3ObjectTrait.php
parent14401efb0f6792415f15c92c1db07fe9e25ea466 (diff)
downloadnextcloud-server-7b07e7251c8a92e95da922f34dde158ddffbeeee.tar.gz
nextcloud-server-7b07e7251c8a92e95da922f34dde158ddffbeeee.zip
make seekable s3 stream generic
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib/private/Files/ObjectStore/S3ObjectTrait.php')
-rw-r--r--lib/private/Files/ObjectStore/S3ObjectTrait.php36
1 files changed, 25 insertions, 11 deletions
diff --git a/lib/private/Files/ObjectStore/S3ObjectTrait.php b/lib/private/Files/ObjectStore/S3ObjectTrait.php
index 1e9d095b9eb..0939dd2a23c 100644
--- a/lib/private/Files/ObjectStore/S3ObjectTrait.php
+++ b/lib/private/Files/ObjectStore/S3ObjectTrait.php
@@ -30,6 +30,7 @@ use Aws\S3\MultipartUploader;
use Aws\S3\ObjectUploader;
use Aws\S3\S3Client;
use Icewind\Streams\CallbackWrapper;
+use OC\Files\Stream\SeekableHttpStream;
const S3_UPLOAD_PART_SIZE = 524288000; // 500MB
@@ -49,16 +50,29 @@ trait S3ObjectTrait {
* @since 7.0.0
*/
function readObject($urn) {
- $context = stream_context_create([
- 's3seek' => [
- 'client' => $this->getConnection(),
- 'bucket' => $this->bucket,
- 'urn' => $urn,
- ],
- ]);
+ return SeekableHttpStream::open(function ($range) use ($urn) {
+ $command = $this->getConnection()->getCommand('GetObject', [
+ 'Bucket' => $this->bucket,
+ 'Key' => $urn,
+ 'Range' => 'bytes=' . $range,
+ ]);
+ $request = \Aws\serialize($command);
+ $headers = [];
+ foreach ($request->getHeaders() as $key => $values) {
+ foreach ($values as $value) {
+ $headers[] = "$key: $value";
+ }
+ }
+ $opts = [
+ 'http' => [
+ 'protocol_version' => 1.1,
+ 'header' => $headers,
+ ],
+ ];
- S3SeekableReadStream::registerIfNeeded();
- return fopen('s3seek://', 'r', false, $context);
+ $context = stream_context_create($opts);
+ return fopen($request->getUri(), 'r', false, $context);
+ });
}
/**
@@ -76,7 +90,7 @@ trait S3ObjectTrait {
$uploader = new MultipartUploader($this->getConnection(), $countStream, [
'bucket' => $this->bucket,
'key' => $urn,
- 'part_size' => S3_UPLOAD_PART_SIZE
+ 'part_size' => S3_UPLOAD_PART_SIZE,
]);
try {
@@ -103,7 +117,7 @@ trait S3ObjectTrait {
function deleteObject($urn) {
$this->getConnection()->deleteObject([
'Bucket' => $this->bucket,
- 'Key' => $urn
+ 'Key' => $urn,
]);
}