我正在开发一个项目,从旧应用程序中导入数十万张照片。我已经编写了全部种子脚本和一个很好的 CustomPathGenerator 来处理存储和检索那么多图像(平面目录不适用于那么多文件)。为了加快导入速度并减少磁盘空间使用,我想在导入期间禁用转换,然后在导入后重新启用它们。我有两个问题。首先,当您将媒体添加到模型时,是否有一种方法可以禁用自动转换?比如:
$myModel->addMedia($path)
->preservingOriginal()
//->skipConversion() // don't do the conversion
->toMediaCollection('images');
其次,我希望能够即时生成转换,类似于:
$image = $myModel->getFirstMedia('images');
if( !$image->hasGeneratedConversion('thumb') ) {
// $image->generateConversion('thumb'); // generate conversion on-the-fly
}
这是内置到 Media 类中的,还是我必须使用 Spatie/Image 包构建自己的generateConversion 方法?
使用 Spatie/Laravel-Media v8
查看文档,有这一部分:
这一切都是关于运行控制台命令,但出于我的目的,我需要在显示转换之前检查转换是否存在,以有效地“延迟加载”拇指。深入研究未记录的类,结果发现非常简单:
$fileManipulator = new \Spatie\MediaLibrary\Conversions\FileManipulator;
$media = $myModel->getMedia('images');
foreach( $media as $img ) {
if( !$img->hasGeneratedConversion('thumb') ) {
$fileManipulator->createDerivedFiles($img);
}
}
这会在首次显示时产生开销,但之后应该会继续快速加载。