/** * Returns a (local copy of) a file for processing it. When changing the * file, you have to take care of replacing the current version yourself! * * @param \TYPO3\CMS\Core\Resource\FileInterface $file * @param bool $writable Set this to FALSE if you only need the file for read operations. This might speed up things, e.g. by using a cached local version. Never modify the file if you have set this flag! * @return string The path to the file on the local disk */ public function getFileForLocalProcessing(\TYPO3\CMS\Core\Resource\FileInterface $file, $writable = true) { error_log('FAL DRIVER: ' . __FUNCTION__); if (!$file->isIndexed() || !$file->getProperty('yagItem') instanceof \Tx_Yag_Domain_Model_Item) { $identifier = $file->getIdentifier(); $fileInfo = $this->getFileInfoByIdentifier($identifier); $sourceUri = $this->yagFileSystemDiv->makePathAbsolute($fileInfo['sourceUri']); } else { $item = $file->getProperty('yagItem'); $sourceUri = $this->yagFileSystemDiv->makePathAbsolute($item->getSourceuri()); } return $sourceUri; }
/** * Outputs file Contents, * clears output buffer first and sends headers accordingly. * * @param FileInterface $file * @param bool $asDownload If set Content-Disposition attachment is sent, inline otherwise * @param string $alternativeFilename the filename for the download (if $asDownload is set) * @param string $overrideMimeType If set this will be used as Content-Type header instead of the automatically detected mime type. * @return void */ public function dumpFileContents(FileInterface $file, $asDownload = false, $alternativeFilename = null, $overrideMimeType = null) { $downloadName = $alternativeFilename ?: $file->getName(); $contentDisposition = $asDownload ? 'attachment' : 'inline'; header('Content-Disposition: ' . $contentDisposition . '; filename="' . $downloadName . '"'); header('Content-Type: ' . ($overrideMimeType ?: $file->getMimeType())); header('Content-Length: ' . $file->getSize()); // Cache-Control header is needed here to solve an issue with browser IE8 and lower // See for more information: http://support.microsoft.com/kb/323308 header("Cache-Control: ''"); header('Last-Modified: ' . gmdate('D, d M Y H:i:s', array_pop($this->driver->getFileInfoByIdentifier($file->getIdentifier(), array('mtime')))) . ' GMT', true, 200); ob_clean(); flush(); while (ob_get_level() > 0) { ob_end_clean(); } $this->driver->dumpFileContents($file->getIdentifier()); }
/** * Returns information about a file for a given file object. * * @param \TYPO3\CMS\Core\Resource\FileInterface $file * @return array */ public function getFileInfo(\TYPO3\CMS\Core\Resource\FileInterface $file) { return $this->getFileInfoByIdentifier($file->getIdentifier()); }
/** * Renames a file in this storage. * * @param \TYPO3\CMS\Core\Resource\FileInterface $file * @param string $newName The target path (including the file name!) * @return string The identifier of the file after renaming */ public function renameFile(\TYPO3\CMS\Core\Resource\FileInterface $file, $newName) { // Makes sure the Path given as parameter is valid $newName = $this->sanitizeFileName($newName); $newIdentifier = rtrim(GeneralUtility::fixWindowsFilePath(dirname($file->getIdentifier())), '/') . '/' . $newName; // The target should not exist already if ($this->fileExists($newIdentifier)) { throw new \TYPO3\CMS\Core\Resource\Exception\ExistingTargetFileNameException('The target file already exists.', 1320291063); } $sourcePath = $this->getAbsolutePath($file); $targetPath = $this->absoluteBasePath . '/' . ltrim($newIdentifier, '/'); $result = rename($sourcePath, $targetPath); if ($result === FALSE) { throw new \RuntimeException('Renaming file ' . $sourcePath . ' to ' . $targetPath . ' failed.', 1320375115); } return $newIdentifier; }
/** * @return string */ public function getIdentifier() { return $this->resource->getStorage()->getUid() . ':' . $this->resource->getIdentifier(); }
/** * Format the current link for HTML output * * @return string */ public function formatCurrentUrl() { return $this->currentFile->getStorage()->getName() . ': ' . $this->currentFile->getIdentifier(); }