即使delete()有效,AWS S3也会拒绝deleteDirectory()请求

时间:2018-10-17 22:23:37

标签: laravel amazon-web-services laravel-5 amazon-s3 aws-sdk

我在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"?>

在四处搜寻之后,我发现有几个用户因相同的原因而出现相同的错误。一个用户说他们已经达到了1,000个键的限制,另一个用户说他们在发布请求中缺少必需的参数,但是这些用户都使用Ruby而不是Laravel。由于我使用的是这些composer软件包,因此我假设这些软件包可以正常工作,而且似乎S3上的所有内容都已正确设置(例如权限和安全性设置)。另一个有趣的事实是,我可以成功地将deleteDirectory与本地驱动程序而不是S3驱动程序一起使用,因此deleteDirectory在该实例中正常工作。

关于什么可能是不对的任何想法?我宁愿删除目录,也不愿遍历文件并在S3上一一删除它们。预先感谢。

0 个答案:

没有答案