If this is set to true, the file will be unlinked after the request is send
Note: If the X-Sendfile header is used, the deleteFileAfterSend setting will not be used.
public deleteFileAfterSend ( boolean $shouldDelete ) : |
||
$shouldDelete | boolean | |
return |
/** * Download dataset. * * @param Request $request * @return Response */ public function downloadAction(Request $request) { $manager = $this->get("accard.outcomes.manager"); $givenFilename = $request->get("file"); $filename = $manager->generateExportFilePath($givenFilename); if (!$givenFilename || !file_exists($filename) || !is_readable($filename)) { throw $this->createNotFoundException("Requested file is invalid, you may only download a file one time before it is deleted."); } $response = new BinaryFileResponse($filename); $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $givenFilename); $response->deleteFileAfterSend(true); return $response; }
/** * Download file. * * @param Request $request * @param Response $response * * @return BinaryFileResponse */ public function index(Request $request, Response $response) { $key = $request->query->get('key', 'gp'); $download = $request->query->get('download', '1'); if ($download == '1') { $disposition = ResponseHeaderBag::DISPOSITION_ATTACHMENT; } else { $disposition = ResponseHeaderBag::DISPOSITION_INLINE; } $metaFile = new \Molengo\MetaFile($response); $info = $metaFile->getInfo($key); $dataFile = $metaFile->getDataFileName($key); $fileName = $info['filename']; $headers = ['Pragma' => 'public', 'Content-Description' => 'File Transfer', 'Content-Transfer-Encoding' => 'binary', 'Expires' => '0', 'Cache-Control' => 'must-revalidate, post-check = 0, pre-check = 0']; $fileResponse = new BinaryFileResponse($dataFile, 200, $headers); $fileResponse->deleteFileAfterSend(false); $fileResponse->setContentDisposition($disposition, $fileName); $fileResponse->prepare($this->request); $fileResponse->sendContent(); // Delete meta file after download $metaFile->delete($key); return $fileResponse; }
public function testDeleteFileAfterSend() { $request = Request::create('/'); $path = __DIR__ . '/File/Fixtures/to_delete'; touch($path); $realPath = realpath($path); $this->assertFileExists($realPath); $response = new BinaryFileResponse($realPath); $response->deleteFileAfterSend(true); $response->prepare($request); $response->sendContent(); $this->assertFileNotExists($path); }
/** * @Route("/download/{slug}.zip", requirements={"slug"=".+"}) * @ParamConverter("entity", class="Cmfcmf\Module\MediaModule\Entity\Collection\CollectionEntity", options={"slug" = "slug"}) * * @param Request $request * @param CollectionEntity $entity * * @return array */ public function downloadAction(CollectionEntity $entity) { if (!$this->get('cmfcmf_media_module.security_manager')->hasPermission($entity, 'download')) { throw new AccessDeniedException(); } \CacheUtil::createLocalDir('CmfcmfMediaModule'); $dir = \CacheUtil::getLocalDir('CmfcmfMediaModule'); $path = $dir . '/' . uniqid(time(), true) . '.zip'; $zip = new \ZipArchive(); if ($zip->open($path, \ZipArchive::CREATE) !== true) { throw new ServiceUnavailableHttpException('Could not create zip archive!'); } $mediaTypeCollection = $this->get('cmfcmf_media_module.media_type_collection'); $hasContent = false; $usedFileNames = []; foreach ($entity->getMedia() as $media) { if ($media instanceof AbstractFileEntity && $media->isDownloadAllowed()) { /** @var UploadableMediaTypeInterface $mediaType */ $mediaType = $mediaTypeCollection->getMediaTypeFromEntity($media); $filename = $media->getBeautifiedFileName(); $originalFileExtension = pathinfo($filename, PATHINFO_EXTENSION); $originalFilename = pathinfo($filename, PATHINFO_BASENAME); for ($i = 1; in_array($filename, $usedFileNames, true); ++$i) { $filename = "{$originalFilename} ({$i})" . (empty($originalFileExtension) ?: ".{$originalFileExtension}"); } $zip->addFile($mediaType->getOriginalWithWatermark($media, 'path', false), $filename); $hasContent = true; } } if (!$hasContent) { $zip->addFromString('Empty Collection.txt', $this->__('Sorry, the collection appears to be empty or does not have any downloadable files.')); } $zip->close(); $response = new BinaryFileResponse($path); $response->deleteFileAfterSend(true); return $response; }
/** * extract theme using locale and theme name. * * @param Request $request * * @return file to be downloaded */ public function extractThemeAction(Request $request) { $themeName = $request->request->get('theme-name'); $locale = $this->getDoctrine()->getRepository('PrestaShopBundle:Lang')->findOneByIsoCode($request->request->get('iso_code'))->getLocale(); $theme = $this->get('prestashop.core.admin.theme.repository')->getInstanceByName($themeName); $tmpFolderPath = $this->get('kernel')->getCacheDir() . '/' . $themeName . '-tmp'; $folderPath = $this->get('kernel')->getCacheDir() . '/' . $themeName; $zipFile = $folderPath . '.' . $locale . '.zip'; // create the directories $fs = new Filesystem(); $fs->mkdir($folderPath); $fs->mkdir($tmpFolderPath); $themeExtractor = $this->get('prestashop.translations.theme_extractor'); $themeExtractor->setOutputPath($tmpFolderPath)->enableOverridingFromDatabase()->extract($theme, $locale); Flattenizer::flatten($tmpFolderPath . '/' . $locale, $folderPath . '/' . $locale, $locale); $this->get('prestashop.utils.zip_manager')->createArchive($zipFile, $folderPath); $response = new BinaryFileResponse($zipFile); $response->deleteFileAfterSend(true); $fs->remove($tmpFolderPath); $fs->remove($folderPath); return $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT); }