我想重命名上传文件的集合,但当我使用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());