deleteFileAfterSend() public method

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 ) : BinaryFileResponse
$shouldDelete boolean
return BinaryFileResponse
 /**
  * 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;
 }
Ejemplo n.º 2
0
 /**
  * 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;
 }
Ejemplo n.º 3
0
 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);
 }
Ejemplo n.º 4
0
 /**
  * @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;
 }
Ejemplo n.º 5
0
 /**
  * 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);
 }