我在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上一一删除它们。预先感谢。