在zend框架中访问公共文件夹外的图像或doc

时间:2011-01-24 11:16:28

标签: zend-framework

我在zend框架中开发一个应用程序。我想将某些安全图像和pdf文档存储在公共文件夹之外,如/ project / data / uploads或/ projects / application / data / uploads。

我无法访问公共文件夹以外的images / pdf文件。 有人可以建议一种方法。

谢谢

1 个答案:

答案 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);
}

当然,其中一些可以推送到服务类中,以保持控制器尽可能薄。在这方面,每个人都有不同的口味。

我承认这段代码没有经过全面测试,主要是试图给出基本的想法。如果我在这里犯了一个总骨头错误,请告诉我。

希望它有所帮助!