[英]Symfony2: Open PDF file in browser
在我的 Symfony 2 項目中,當用戶單擊用於查看 pdf 文件的鏈接時,我想在瀏覽器中顯示 pdf。 pdf 文件包含在我的“views”文件夾中,位於名為“pdf-files”的子文件夾中。
我需要如何調整以下 controller function 以便在瀏覽器中顯示 pdf 文件?
/**
* @Route("/pdf/{pdfFilename}")
*/
public function pdfAction($pdfFilename) {
return $this->render('@App/pdf-files/'.$pdfFilename);
}
這都是關於http請求的內容類型標頭的。 所以只需設置:
$response = $this->render('@App/pdf-files/'.$pdfFilename);
$response->headers->set('Content-Type', 'application/pdf');
return $response;
要提供靜態文件,您可能需要使用BinaryFileResponse類。 在這種響應中,您可以設置content disposition
-該文件應在瀏覽器中打開還是作為附件下載。
因此,您的代碼應類似於:
public function pdfAction($pdfFilename)
{
$kernel = $this->get('kernel');
$path = $kernel->locateResource('@AppBundle/Resources/pdf-files/'.$pdfFilename);
$response = new BinaryFileResponse($path)
$response->headers->set('Content-Type', 'application/pdf');
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_INLINE, //use ResponseHeaderBag::DISPOSITION_ATTACHMENT to save as an attachement
$pdfFilename
);
return $response;
}
編輯:由於默認情況下locateResource在Resources
目錄下尋找文件,我建議將您的pdf-files
目錄從views
目錄移至Resources
在這里從 Tomasz 的回答中獲得幫助是使其工作的另一種方法,在這種情況下,它讓您從資產目錄中讀取文件。 這個工程在 Symfony 4 以后。
//Imports used
use Symfony\Component\Asset\Package;
use Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
$package = new Package(new EmptyVersionStrategy());
$path = $package->getUrl('assets/pdf/pdffilename.pdf');
$response = new BinaryFileResponse($path);
$response->headers->set('Content-Type', 'application/pdf');
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_INLINE,
"pdf-name-at-the-time-of-download.pdf"
);
return $response;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.