/** * @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 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; }