AWS S3 отклоняет запрос deleteDirectory(), хотя delete() работает

Я работаю над проектом Laravel 5.4 и в своем файле composer.json я использую следующие зависимости:

"league/flysystem-aws-s3-v3": "~1.0",
"aws/aws-sdk-php-laravel": "3.*",

Когда я пытаюсь запустить ниже, все работает нормально:

Storage::disk('s3')->delete('exports/a_few_subdirectories/file.xls');

Однако, когда я пытаюсь запустить эту строку кода в команде Artisan, я получаю следующую ошибку:

Storage::disk('s3')->deleteDirectory('exports');

Вот сообщение об ошибке, которое я получаю:

Aws\S3\Exception\S3Exception Error executing "DeleteObjects" on "https://mybucket.s3.us-west-2.amazonaws.com/?delete"; AWS HTTP error: Client error: `POST https://mybucket.s3.us-west-2.amazonaws.com/?delete` resulted in a `400 Bad Request` response:
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>MalformedXML</Code><Message>The XML you provided was not well-formed (truncated...)
 MalformedXML (client): The XML you provided was not well-formed or did not validate against our published schema - <?xml version="1.0" encoding="UTF-8"?>

Поискав в поиске, я нашел пару пользователей, у которых была эта же ошибка по существенно разным причинам. Один пользователь сказал, что достиг предела в 1000 ключей, а другой сказал, что в своем пост-запросе отсутствует обязательный параметр, но эти пользователи оба использовали Ruby, а не Laravel. Поскольку я использую эти пакеты композитора, я предполагаю, что пакеты работают правильно, и также кажется, что все на S3 настроено правильно (например, разрешения и настройки безопасности). Еще один забавный факт, что я могу успешно использовать deleteDirectory с локальным драйвером вместо драйвера S3, так deleteDirectory работает в этом случае.

Есть идеи, что может быть не так? Я предпочел бы удалить каталог, чем перебирать файлы и удалять их один за другим на S3. Заранее спасибо.

0 ответов

Другие вопросы по тегам