diff options
author | Ferdinand Thiessen <opensource@fthiessen.de> | 2025-05-16 12:59:52 +0200 |
---|---|---|
committer | Ferdinand Thiessen <opensource@fthiessen.de> | 2025-05-16 17:28:24 +0200 |
commit | 0f69648d0ade5b2d8bbf24e1a7bf520b4722e5e5 (patch) | |
tree | cd106f60d055c43082245f9f4e96d055db180023 | |
parent | 01db539d0ae936abdc82723d458cf816dcb6aad8 (diff) | |
download | nextcloud-server-chore/move-stream-copy-implementation.tar.gz nextcloud-server-chore/move-stream-copy-implementation.zip |
fix(files_version): use `Storage::writeStream` instead of deprecated `streamCopy` if possiblechore/move-stream-copy-implementation
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
-rw-r--r-- | apps/files_versions/lib/Storage.php | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/apps/files_versions/lib/Storage.php b/apps/files_versions/lib/Storage.php index 49d577ed94b..4b58d721583 100644 --- a/apps/files_versions/lib/Storage.php +++ b/apps/files_versions/lib/Storage.php @@ -33,6 +33,7 @@ use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; use OCP\Files\Search\ISearchBinaryOperator; use OCP\Files\Search\ISearchComparison; +use OCP\Files\Storage\IWriteStreamStorage; use OCP\Files\StorageInvalidException; use OCP\Files\StorageNotAvailableException; use OCP\IURLGenerator; @@ -421,10 +422,21 @@ class Storage { || $storage2->instanceOfStorage(\OC\Files\ObjectStore\ObjectStoreStorage::class) ) { $source = $storage1->fopen($internalPath1, 'r'); - $target = $storage2->fopen($internalPath2, 'w'); - [, $result] = Files::streamCopy($source, $target, true); - fclose($source); - fclose($target); + $result = $source !== false; + if ($result) { + if ($storage2->instanceOfStorage(IWriteStreamStorage::class)) { + /** @var IWriteStreamStorage $storage2 */ + $storage2->writeStream($internalPath2, $source); + } else { + $target = $storage2->fopen($internalPath2, 'w'); + $result = $target !== false; + if ($target !== false) { + [, $result] = Files::streamCopy($source, $target, true); + fclose($target); + } + } + fclose($source); + } if ($result !== false) { $storage1->unlink($internalPath1); |