Merge pull request #8261 from nextcloud/s3-folder-delete-13
[13] Fix deleting folders when using s3 external storage
This commit is contained in:
commit
57e3900095
|
@ -101,7 +101,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
|
|||
$keys = array_keys($this->objectCache->getData());
|
||||
$keyLength = strlen($key);
|
||||
foreach ($keys as $existingKey) {
|
||||
if (substr($existingKey, 0, $keyLength) === $keys) {
|
||||
if (substr($existingKey, 0, $keyLength) === $key) {
|
||||
unset($this->objectCache[$existingKey]);
|
||||
}
|
||||
}
|
||||
|
@ -243,17 +243,22 @@ class AmazonS3 extends \OC\Files\Storage\Common {
|
|||
$params['Prefix'] = $path . '/';
|
||||
}
|
||||
try {
|
||||
$connection = $this->getConnection();
|
||||
// Since there are no real directories on S3, we need
|
||||
// to delete all objects prefixed with the path.
|
||||
do {
|
||||
// instead of the iterator, manually loop over the list ...
|
||||
$objects = $this->getConnection()->listObjects($params);
|
||||
$objects = $connection->listObjects($params);
|
||||
// ... so we can delete the files in batches
|
||||
$this->getConnection()->deleteObjects(array(
|
||||
'Bucket' => $this->bucket,
|
||||
'Objects' => $objects['Contents']
|
||||
));
|
||||
$this->testTimeout();
|
||||
if (isset($objects['Contents'])) {
|
||||
$connection->deleteObjects([
|
||||
'Bucket' => $this->bucket,
|
||||
'Delete' => [
|
||||
'Objects' => $objects['Contents']
|
||||
]
|
||||
]);
|
||||
$this->testTimeout();
|
||||
}
|
||||
// we reached the end when the list is no longer truncated
|
||||
} while ($objects['IsTruncated']);
|
||||
} catch (S3Exception $e) {
|
||||
|
|
Loading…
Reference in New Issue