diff --git a/src/GitList/Controller/TreeController.php b/src/GitList/Controller/TreeController.php index 1f20220..58eaec4 100644 --- a/src/GitList/Controller/TreeController.php +++ b/src/GitList/Controller/TreeController.php @@ -87,13 +87,24 @@ class TreeController implements ControllerProviderInterface . substr($tree, 0, 2) . DIRECTORY_SEPARATOR . substr($tree, 2) . '.' - . $format; + . $format; if (!file_exists($file)) { $repository->createArchive($tree, $file, $format); } - return new BinaryFileResponse($file); + /** + * Generating name for downloading, lowercasing and removing all non + * ascii and special characters + */ + $filename = strtolower($branch); + $filename = preg_replace('#[^a-z0-9]#', '_', $filename); + $filename = preg_replace('#_+#', '_', $filename); + $filename = $filename . '.' . $format; + + $response = new BinaryFileResponse($file); + $response->setContentDisposition('attachment', $filename); + return $response; })->assert('format', '(zip|tar)') ->assert('repo', $app['util.routing']->getRepositoryRegex()) ->assert('branch', $app['util.routing']->getBranchRegex())