aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFerdinand Thiessen <opensource@fthiessen.de>2025-05-16 12:59:52 +0200
committerFerdinand Thiessen <opensource@fthiessen.de>2025-05-16 17:28:24 +0200
commit0f69648d0ade5b2d8bbf24e1a7bf520b4722e5e5 (patch)
treecd106f60d055c43082245f9f4e96d055db180023
parent01db539d0ae936abdc82723d458cf816dcb6aad8 (diff)
downloadnextcloud-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.php20
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);