Fal::createFalFile()
\nn\t3::Fal()->createFalFile($storageConfig, $srcFile, $keepSrcFile = false, $forceCreateNew = false);
Creates a File (FAL) object (sys_file)
nnt3::Fal()->createFalFile( $storageConfig, $srcFile, $keepSrcFile, $forceCreateNew );
@param string $storageConfig Path/folder in which the FAL file is to be saved (e.g. 'fileadmin/projectdata/')
@param string $srcFile Source file to be converted to FAL (e.g. 'uploads/tx_nnfesubmit/example.jpg')
Can also be URL to YouTube/Vimeo video (e.g. https://www. youtube.com/watch?v=7Bb5jXhwnRY)
@param boolean $keepSrcFile Copy source file only, do not move?
@param boolean $forceCreateNew Should a new file always be created? If not, it may return an existing file object
| @return \Nng\Nnhelpers\Domain\Model\File|\TYPO3\CMS\Core\Resource\File|boolean
Source Code
public function createFalFile ( $storageConfig, $srcFile, $keepSrcFile = false, $forceCreateNew = false )
{
$fileHelper = \nn\t3::File();
$fileRepository = \nn\t3::injectClass( FileRepository::class );
$srcFile = $fileHelper->stripBaseUrl( $srcFile );
$isExternalMedia = strpos( $srcFile, 'http://') !== false || strpos( $srcFile, 'https://') !== false;
if (!$storageConfig) {
$storageConfig = $isExternalMedia ? 'fileadmin/videos/' : $srcFile;
}
// Absoluter Pfad zur Quell-Datei ('/var/www/website/uploads/bild.jpg')
$absSrcFile = $fileHelper->absPath( $srcFile );
// Keine externe URL (YouTube...) und Datei existiert nicht? Dann abbrechen!
if (!$isExternalMedia && !$fileHelper->exists($srcFile)) {
return false;
}
// Object, Storage-Model für Zielverzeichnis (z.B. Object für 'fileadmin/' wenn $storageConfig = 'fileadmin/test/was/')
$storage = $fileHelper->getStorage($storageConfig, true);
// Object, relativer Unterordner innerhalb der Storage, (z.B. Object für 'test/was/' wenn $storageConfig = 'fileadmin/test/was/')
$subfolderInStorage = \nn\t3::Storage()->getFolder($storageConfig, $storage);
// String, absoluter Pfad zum Zielverzeichnis
$absDestFolderPath = $fileHelper->absPath( $subfolderInStorage );
// Dateiname, ohne Pfad ('fileadmin/test/bild.jpg' => 'bild.jpg')
$srcFileBaseName = basename($srcFile);
if (!$forceCreateNew && $storage->hasFileInFolder( $srcFileBaseName, $subfolderInStorage )) {
$existingFile = $storage->getFileInFolder( $srcFileBaseName, $subfolderInStorage );
// @returns \TYPO3\CMS\Core\Resource\File
return $existingFile;
}
if ($isExternalMedia) {
// YouTube und Vimeo-Videos: Physische lokale .youtube/.vimeo-Datei anlegen
$helper = \nn\t3::injectClass( OnlineMediaHelperRegistry::class );
// \TYPO3\CMS\Core\Resource\File
$newFileObject = $helper->transformUrlToFile( $srcFile, $subfolderInStorage );
} else {
// "Normale" Datei: Datei in Ordner kopieren und FAL erstellen
// Name der Datei im Zielverzeichnis
$absTmpName = $absDestFolderPath . $srcFileBaseName;
// Kopieren
if ($forceCreateNew) {
$success = $fileHelper->copy( $absSrcFile, $absTmpName, $forceCreateNew );
$absTmpName = $success;
} else {
if ($keepSrcFile) {
$success = $fileHelper->copy( $absSrcFile, $absTmpName );
$absTmpName = $success;
} else {
$success = $fileHelper->move( $absSrcFile, $absTmpName );
}
}
if (!$success) return false;
// Nutze die File-Indexer-Funktion, um die temporäre Datei in der Tabelle sys_file einzufügen
$this->clearCache($absTmpName);
// String, relativer Pfad der Datei innerhalb der Storage. Ermittelt selbstständig die passende Storage ()
$relPathInStorage = $fileHelper->getRelativePathInStorage( $absTmpName );
// File-Object für tmp-Datei holen
$tmpFileObject = $storage->getFile($relPathInStorage);
if (!$tmpFileObject) return false;
// $newFileObject = $tmpFileObject->moveTo($subfolderInStorage, $srcFileBaseName, DuplicationBehavior::RENAME);
$newFileObject = $tmpFileObject;
}
if (!$newFileObject) return false;
// Exif-Daten für Datei ermitteln
if ($exif = $fileHelper->getExifData( $srcFile )) {
\nn\t3::Db()->update('sys_file', ['exif'=>json_encode($exif)], $newFileObject->getUid());
}
// @returns \TYPO3\CMS\Core\Resource\File
return $newFileObject;
}
Copied!