我在zend框架中开发一个应用程序。我想将某些安全图像和pdf文档存储在公共文件夹之外,如/ project / data / uploads或/ projects / application / data / uploads。
我无法访问公共文件夹以外的images / pdf文件。 有人可以建议一种方法。
谢谢
答案 0 :(得分:2)
你必须有一个单独的动作,知道如何获取和提供所有这些东西。像这样:
public function viewpdfAction()
{
$id = (int) $this->_getParam('id', 0);
// You implement some function - either here in your controller
// or someplace else - to get the pdf name from the passed id.
// Alternatively, you can pass the name itself. Up to you, of course.
// The key is that the request somehow identifies the file requested.
$pdfName = $this->_mapPdfIdToName($id);
// The path to the real pdf
$pdfFile = '/project/data/uploads/pdf/' . $pdfName;
// Disable rendering
$this->_helper->viewRenderer->setNoRender(true);
// Send the right mime headers for the content type
$this->getResponse()
->setBody('')
->setHeader('Cache-control', 'public') // needed for IE, I have read
->setHeader('Content-type', 'application/pdf')
->setHeader('Content-Disposition', sprintf('attachment; filename="%s"', $pdfName));
// Send the content
readfile($pdfFile);
}
当然,其中一些可以推送到服务类中,以保持控制器尽可能薄。在这方面,每个人都有不同的口味。
我承认这段代码没有经过全面测试,主要是试图给出基本的想法。如果我在这里犯了一个总骨头错误,请告诉我。
希望它有所帮助!