Laravel 无法使用 Storage::('s3')->delete($files) 删除远程 url 中的文件;但可以在使用 aws 命令时删除

Ric*_*nho 1 php amazon-web-services laravel minio

我想像这样删除我的 Laravel 中的这些文件。但它不起作用!!

use Storage;

class SomeController extends Controller
{
    public function delete()
    {
        $filesToDelete = [
           'http://minio:9100/minio/myapp/1/ImNkE0wwrstgSpzFyruw8.jpeg',
           'http://minio:9100/minio/myapp/1/YFrdE0sarsAcpfFyrifd2.jpeg'
        ];

        // cant delete using this
        Storage::disk('s3')->delete($filesToDelete); 
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在我的 bash 中使用此命令删除时,它运行良好

aws --endpoint-url http://minio:9100 s3 rm s3://myapp/1/ImNkE0wwrstgSpzFyruw8.jpeg
delete: s3://myapp/1/ImNkE0wwrstgSpzFyruw8.jpeg
Run Code Online (Sandbox Code Playgroud)

我的 aws 配置列表在我的项目配置中完全相同!我可以使用 Storage 上传文件,但是当我尝试删除文件时它不起作用:

// Working
Storage::disk('s3')->put('1/ImNkE0wwrstgSpzFyruw8.jpeg', $file);
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?无论如何使用laravel删除这些文件?

https://docs.min.io/docs/aws-cli-with-minio https://readouble.com/laravel/5.4/en/filesystem.html

小智 6

我解决了这个解析网址,如下所示:

$file_path = parse_url($file_url);
        //return $file_path['path'];
        Storage::disk('s3')->delete($file_path);
Run Code Online (Sandbox Code Playgroud)

这个对我有用。在您的存储桶中,文件有一个密钥,需要从您的 php 函数中删除文件。为了得到这个对象 url 被解析。


小智 5

我认为问题是文件路径。尝试按照下面提到的方式运行。

Storage::disk('s3')->delete('myapp/1/ImNkE0wwrstgSpzFyruw8.jpeg'); 
Run Code Online (Sandbox Code Playgroud)