我尝试了三种不同的方法来检测FileReference
的原始文件是否仍然存在(即使用SFTP或类似方法已在TYPO3外部删除了文件):
if($fileReference instanceof \TYPO3\CMS\Extbase\Domain\Model\FileReference) {
$isMissing = $fileReference->getOriginalResource()->getStorage()->getFile($fileReference->getOriginalResource()->getIdentifier())->isMissing();
$isMissing = $fileReference->getOriginalResource()->getOriginalFile()->isMissing();
$isMissing = $fileReference->getOriginalResource()->isMissing();
}
只有第一个给我正确的isMissing()
值。
答案 0 :(得分:2)
属性isMissing
是一个数据库值,如果存储设备检测到丢失的文件,则会设置该值。在getFile
上,存储检查文件是否丢失,并为文件设置“ isMissing”。如果您不将其保留到数据库中,则在下一次调用时该设置将变得松散。
您也可以致电$isMissing = $fileReference->getOriginalResource()->getStorage()->hasFile($fileReference->getOriginalResource()->getIdentifier());
如果要经常检查已删除的文件,可以运行文件索引器调度程序(TYPO3\CMS\Scheduler\Task\FileStorageIndexingTask
)。如果您允许外部更改文件(例如ftp),则必须这样做。