使用spatie/media库,如何重命名上传文件的集合



我想重命名上传文件的集合,但当我使用addAllMediaFromRequest()时,我无法从文件中检索信息。

在这个例子中;我需要知道文件扩展名才能重命名文件。

$files = $post->addAllMediaFromRequest();
$files->each(function (FileAdder $file) {
$file->usingFileName(Str::random(16) . '.jpg')  // What if it's a png?
->toMediaCollection();
});

在laravel中获取文件扩展名:

$request->file('photo')->extension()

创建新文件名:

$newFileName = Str::random(20) .'.'.$request->file('photo')->extension();

不要忘记导入Str类。

然后你可以在容易地存储之前重命名上传的文件

$item->addMedia($request->photo)->usingFileName($newFileName)->toMediaCollection('photo');

代码测试Laravel v9

使用toMediaCollection("media_collection_name")可以轻松完成
在您的代码中:

$files = $post->addAllMediaFromRequest(); 
$files->each(function (FileAdder $file) {
$ext  = $file->extension();//this will get your file extension
$file->usingFileName(Str::random(16) . '.'.$ext)
->toMediaCollection("media_collection_name");
});

从那以后,他们添加了FileNamer类,可以实现我想要实现的目标。您可以将自己的类与配置一起使用。

FileNamer.php

namespace App;
use SpatieMediaLibrarySupportFileNamerDefaultFileNamer;
class FileNamer extends DefaultFileNamer
{
public function originalFileName(string $fileName): string
{
return Str::random(16);
}
}

媒体库.php

/*
* This is the class that is responsible for naming generated files.
*/
'file_namer' => AppFileNamer::class,

StoreFilesController.php

$files = $post->addAllMediaFromRequest();
$files->each(fn (FileAdder $file) => $file->toMediaCollection());

最新更新