如何更改空间媒体库中的图像目录



我是这个包的新手,因为我通常使用图像干预。所以问题是,每当我保存图像时,它都保存在存储目录中,而不是公共目录中。我试着查看文件,做了一些研究,但没有看到任何答案。请参阅下面的代码进行保存。

$user->addMediaFromRequest('avatar')->toMediaCollection('avatars');

包装:

https://spatie.be/docs/laravel-medialibrary/v7/introduction

您可以简单地使用$user->addMediaFromRequest('avatar')->toMediaCollection('avatars', 'disk');定义文件系统配置

以下是我如何使用这个包(简单用法(,如果你以后需要它

在我的型号上:

use SpatieMediaLibraryHasMediaHasMedia;
use SpatieMediaLibraryHasMediaHasMediaTrait;
use SpatieMediaLibraryModelsMedia;
class User extends Model implements HasMedia
{
use HasMediaTrait;
public function registerMediaCollections()
{
$this
->addMediaCollection('avatar')
->singleFile()
->useDisk('public');
->useFallbackUrl(asset('/images/default-user.png'))
->useFallbackPath(public_path('/images/default-user.png'));
}
public function registerMediaConversions(Media $media = null)
{
$this->addMediaConversion('avatar-thumb')->width(120)->height(120);
}
...

为了使用模型访问器获取文件url im,在我的模型中添加了以下函数:

public function getAvatarAttribute()
{
$file = $this->getMedia('avatar')->first();
if($file) {
$file->url = $file->getUrl();
$file->thumbnail = $file->getUrl('avatar-thumb'));
$file->alternate = $file->getCustomProperty('alternate') ?: $file->file_name;
}else{
$file = new StdClass;
$file->url = $this->getFallbackMediaUrl('avatar');
$file->thumbnail = public_path('/images/default-user-thumb.png');
$file->alternate = 'avatar.png';
}
return $file;
}

同样使用自定义路径,在config\medialibrary.php中设置此数组'path_generator' => PathToYourClass::class,

然后是类:

use SpatieMediaLibraryModelsMedia;
use SpatieMediaLibraryPathGeneratorPathGenerator as PathGenerators;
class PathGenerator implements PathGenerators
{
public function getPath(Media $media): string
{
return $this->getBasePath($media).'/';
}
public function getPathForConversions(Media $media): string
{
return $this->getBasePath($media).'/conversions/';
}
public function getPathForResponsiveImages(Media $media): string
{
return $this->getBasePath($media).'/responsive-images/';
}
protected function getBasePath(Media $media): string
{
//here im using trait to generate default path, e.g: path/mimes/avatar/media->id
//its up to you to define folder structure, just make sure each folder
//for conversions has unique name, or else it will be deleted
$base_folder = $this->get_base_folder($media->mime_type);
return "{$base_folder}/{$media->collection_name}/{$media->getKey()}";
}
}

最新更新