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

时间:2020-05-26 16:14:48

标签: php laravel laravel-5 file-upload spatie

我正在使用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, 

我进行了搜索,但找不到确切答案,

有人可以帮助我吗?

谢谢

1 个答案:

答案 0 :(得分:1)

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

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

例如,您可以创建一个新类来扩展该接口并返回模型的某些路径

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/';
    }
}

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

'path_generator' => CustomPathGenerator::class,

参考:

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

Spatie MediaLibrary default storage depending on the model最佳答案。