/** * @param FileVersion $fileVersion * @param string $locale * @param string $dispositionType * * @return BinaryFileResponse */ protected function getFileResponse($fileVersion, $locale, $dispositionType = ResponseHeaderBag::DISPOSITION_ATTACHMENT) { $cleaner = $this->get('sulu.content.path_cleaner'); $fileName = $fileVersion->getName(); $fileSize = $fileVersion->getSize(); $storageOptions = $fileVersion->getStorageOptions(); $mimeType = $fileVersion->getMimeType(); $version = $fileVersion->getVersion(); $path = $this->getStorage()->load($fileName, $version, $storageOptions); $response = new BinaryFileResponse($path); $pathInfo = pathinfo($fileName); // Prepare headers $disposition = $response->headers->makeDisposition($dispositionType, $fileName, $cleaner->cleanup($pathInfo['filename'], $locale) . '.' . $pathInfo['extension']); // Set headers $response->headers->set('Content-Type', !empty($mimeType) ? $mimeType : 'application/octet-stream'); $response->headers->set('Content-Disposition', $disposition); $response->headers->set('Content-length', $fileSize); return $response; }
/** * @param int $mediaId * @param FileVersion $fileVersion * @param string $locale * * @return array */ protected function getPreviewsFromFileVersion($mediaId, $fileVersion, $locale) { $title = ''; /* * @var FileVersionMeta */ foreach ($fileVersion->getMeta() as $key => $meta) { if ($meta->getLocale() == $locale) { $title = $meta->getTitle(); break; } elseif ($key == 0) { // fallback title $title = $meta->getTitle(); } } $mediaFormats = $this->formatManager->getFormats($mediaId, $fileVersion->getName(), $fileVersion->getStorageOptions(), $fileVersion->getVersion(), $fileVersion->getMimeType()); foreach ($mediaFormats as $formatName => $formatUrl) { if ($formatName == $this->collectionPreviewFormat) { return ['url' => $formatUrl, 'title' => $title]; break; } } return []; }
/** * @param FileVersion $fileVersion * @param string $locale * @param string $dispositionType * * @return StreamedResponse */ protected function getFileResponse($fileVersion, $locale, $dispositionType = ResponseHeaderBag::DISPOSITION_ATTACHMENT) { $cleaner = $this->get('sulu.content.path_cleaner'); $fileName = $fileVersion->getName(); $fileSize = $fileVersion->getSize(); $storageOptions = $fileVersion->getStorageOptions(); $mimeType = $fileVersion->getMimeType(); $version = $fileVersion->getVersion(); $path = $this->getStorage()->load($fileName, $version, $storageOptions); $response = new StreamedResponse(function () use($path) { flush(); // send headers $handle = fopen($path, 'r'); while (!feof($handle)) { $buffer = fread($handle, 1024); echo $buffer; flush(); // buffered output } fclose($handle); }); $pathInfo = pathinfo($fileName); // Prepare headers $disposition = $response->headers->makeDisposition($dispositionType, $fileName, $cleaner->cleanup($pathInfo['filename'], $locale) . '.' . $pathInfo['extension']); // Set headers $response->headers->set('Content-Type', !empty($mimeType) ? $mimeType : 'application/octet-stream'); $response->headers->set('Content-Disposition', $disposition); $response->headers->set('Content-length', $fileSize); return $response; }