简体   繁体   English

TYPO3-Extbase-检测给定FileReference的丢失文件

[英]TYPO3 - Extbase - Detect missing files for a given FileReference

I've tried three different ways to detect if a FileReference 's original file is still existing (ie file has been deleted outside TYPO3 using SFTP or similar): 我尝试了三种不同的方法来检测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();
}

Only the first one give me the right isMissing() value. 只有第一个给我正确的isMissing()值。

The property isMissing is an database value, which is set if the storage detect an missing file. isMissing属性是一个数据库值,如果存储设备检测到丢失的文件,则会设置该值。 On getFile the storage check if the file is missing and set "isMissing" for the file. getFile的存储上,检查文件是否丢失,然后为文件设置“ isMissing”。 If you dont persist this to the database, the setting is get loose with the next call. 如果您不将其保留到数据库中,则在下一次调用时该设置将变得松散。

You can also call $isMissing = $fileReference->getOriginalResource()->getStorage()->hasFile($fileReference->getOriginalResource()->getIdentifier()); 您还可以调用$isMissing = $fileReference->getOriginalResource()->getStorage()->hasFile($fileReference->getOriginalResource()->getIdentifier());

You can run the file indexer scheduler ( TYPO3\\CMS\\Scheduler\\Task\\FileStorageIndexingTask ) if you want to check frequently for deleted files. 如果要经常检查已删除的文件,可以运行文件索引器调度程序( TYPO3\\CMS\\Scheduler\\Task\\FileStorageIndexingTask )。 This should be required if you let change files externaly (like ftp). 如果您允许外部更改文件(例如ftp),则应该这样做。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM