Spatie Medialibrary Custom 自定义目录作为前缀

Spatie Medialibrary Custom Custom Directory As Prefix

我正在使用 spatie/laravel-medialibrary:8.0

当我上传文件时,它被保存在 storage/public 目录中。

1/filename.file_extension, 2/filename.file_extension...

我认为 1, 2... 是文件的 ID。

有什么办法可以根据用户不同放不同的前缀目录吗?

比如我想这样放

public/storage/user_id/1/filename.file_extension, 

我搜索了一下,但找不到确切的答案,

谁能帮帮我?

谢谢

方法在文档 Using a custom directory structure 下。

要覆盖默认文件夹结构,可以在配置文件中将符合 PathGenerator 接口的 class 指定为 path_generator

例如,您可以创建一个新的 class 来扩展该接口和 return 模型的一些路径

class CustomPathGenerator implements PathGenerator
{
    public function getPath(Media $media) : string
    {
        if ($media instanceof Post) {
            return 'user_id/' . $media->user_id . '/' . $media->id;
        }
        return $media->id;
    }

    public function getPathForConversions(Media $media) : string
    {
        return $this->getPath($media) . 'conversions/';
    }

    public function getPathForResponsiveImages(Media $media): string
    {
        return $this->getPath($media) . 'responsive/';
    }
}

然后更新配置文件并指向 class:

'path_generator' => CustomPathGenerator::class,

参考文献:

spatie/laravel-medialibrary 文档 Using a custom directory structure

Laracasts Spatie MediaLibrary default storage depending on the model "best answer"。