php - Spatie Medialibrary 自定义自定义目录作为前缀
问题描述
我正在使用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,
我搜索了它,但找不到确切的答案,
谁能帮我?
谢谢
解决方案
方法是在 docs Using a custom directory structure下。
PathGenerator
要覆盖默认文件夹结构,可以path_generator
在配置文件中指定符合 -interface 的类。
例如,您可以创建一个扩展该接口的新类并为您的模型返回一些路径
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 Docs使用自定义目录结构。
Laracasts Spatie MediaLibrary 默认存储取决于模型“最佳答案”。
推荐阅读
- python - 我正在寻找一种方法来从以前的列表中创建一个新列表,但只使用我想要的单词
- node.js - 是否可以在没有重定向的情况下使用 404 http 代码呈现“找不到页面”?
- python - 如何修复 Windows 转义字符在 python 中无法正常工作?
- java - Beam 写入 avro 文件序列化错误
- string - 如何根据命名约定(前缀)过滤文件列表
- dc.js - 是否可以使用 dc 2.1.9 使用复选框菜单功能?
- google-apps-script - 上传/覆盖 Google 表格以更新 DSA 广告系列的页面供稿
- javascript - 使用 ajax / json 发送 jquery 数组
- java - 使用 Kafka 实现 STOMP 协议
- reactjs - 使用 reactjs 打开选定的模式