Я работаю над проектом 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.Заранее спасибо.