/**
* @param Request $request
* @param $storageKey
*
* @return Response
*/
protected function createFileResponse(Request $request, $storageKey)
{
$response = new Response();
$parts = explode('/', $storageKey);
$file = $this->getFile($parts[0]);
if (!$file) {
return $response->setContent('File not found.')->setStatusCode(Response::HTTP_NOT_FOUND);
}
if ($request->get('dl') !== null) {
$filename = $file->getFilename();
if (count($parts) > 1) {
$filename = $parts[count($parts) - 1];
}
$filenameFallback = filter_var($filename, FILTER_SANITIZE_URL);
if ($filenameFallback != $filename) {
$guesser = ExtensionGuesser::getInstance();
$extension = filter_var($guesser->guess($file->getMimeType()) ?: $file->getExtension(), FILTER_SANITIZE_URL);
$filenameFallback = $file->getStorageKey() . ($extension ? '.' . $extension : '');
}
$response->headers->set('Content-Disposition', $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $filename, $filenameFallback));
} else {
$response->setCache(array('etag' => $file->getStorageKey(), 'last_modified' => $file->getCreatedAt()));
if ($response->isNotModified($request)) {
return $response;
}
}
$response->setContent($file->getContents());
$response->headers->set('Content-type', $file->getMimeType());
$response->headers->set('Content-length', $file->getSize());
return $response;
}