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

Laravel cant delete file in remote url using Storage::('s3')->delete($files); but can delete when using aws command

我想像这样删除我 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); 
    }
}

但是当我尝试在我的 bash 中使用此命令删除时,它完美无缺

aws --endpoint-url http://minio:9100 s3 rm s3://myapp/1/ImNkE0wwrstgSpzFyruw8.jpeg
delete: s3://myapp/1/ImNkE0wwrstgSpzFyruw8.jpeg

我的aws配置列表和我的项目配置完全一样! 我可以使用存储来上传文件,但是当我尝试删除文件时它不起作用:

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

我是不是做错了什么?有没有办法使用 laravel 删除这些文件??

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

I think the problem is file path. Try to run as mentioned below.

Storage::disk('s3')->delete('myapp/1/ImNkE0wwrstgSpzFyruw8.jpeg'); 

你可以这样操作

$file_name='your_file_path';
unlink(storage_path($file_name));

我正在解决这个解析 url,像这样:

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

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

您添加了错误的文件path.In为了从 s3 存储桶中删除图像您不​​需要提供图像的完整路径,只需添加图像的根路径。

删除多张图片

        $files = [
           'myapp/1/ImNkE0wwrstgSpzFyruw8.jpeg',
           'myapp/1/YFrdE0sarsAcpfFyrifd2.jpeg'
        ];

        Storage::disk('s3')->delete($files); 

删除单张图片

        $file = 'myapp/1/ImNkE0wwrstgSpzFyruw8.jpeg';
        Storage::disk('s3')->delete($file);