diff options
author | Robin Appelman <robin@icewind.nl> | 2024-07-22 21:51:34 +0200 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2024-07-24 17:37:20 +0200 |
commit | c2b1f079b110c1f41df78faf0dbd44c3f87406c0 (patch) | |
tree | b2f9926632e218da0817e63474d511da213e8ba7 /apps/files_external | |
parent | 8cc996155e77e10a626906550a74953fb4a6928d (diff) | |
download | nextcloud-server-c2b1f079b110c1f41df78faf0dbd44c3f87406c0.tar.gz nextcloud-server-c2b1f079b110c1f41df78faf0dbd44c3f87406c0.zip |
feat: add a specialized writeStream implementation for s3 external storage
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'apps/files_external')
-rw-r--r-- | apps/files_external/lib/Lib/Storage/AmazonS3.php | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/apps/files_external/lib/Lib/Storage/AmazonS3.php b/apps/files_external/lib/Lib/Storage/AmazonS3.php index 5cb2c4ef1ef..895bd00c462 100644 --- a/apps/files_external/lib/Lib/Storage/AmazonS3.php +++ b/apps/files_external/lib/Lib/Storage/AmazonS3.php @@ -8,6 +8,7 @@ namespace OCA\Files_External\Lib\Storage; use Aws\S3\Exception\S3Exception; use Icewind\Streams\CallbackWrapper; +use Icewind\Streams\CountWrapper; use Icewind\Streams\IteratorDirectory; use OC\Files\Cache\CacheEntry; use OC\Files\ObjectStore\S3ConnectionTrait; @@ -754,4 +755,24 @@ class AmazonS3 extends \OC\Files\Storage\Common { return true; } } + + public function writeStream(string $path, $stream, ?int $size = null): int { + if ($size === null) { + $size = 0; + // track the number of bytes read from the input stream to return as the number of written bytes. + $stream = CountWrapper::wrap($stream, function (int $writtenSize) use (&$size) { + $size = $writtenSize; + }); + } + + if (!is_resource($stream)) { + throw new \InvalidArgumentException("Invalid stream provided"); + } + + $path = $this->normalizePath($path); + $this->writeObject($path, $stream, $this->mimeDetector->detectPath($path)); + $this->invalidateCache($path); + + return $size; + } } |