【发布时间】:2014-12-24 13:32:23
【问题描述】:
在我的应用程序中,有一些用户上传到服务器的 PDF 文件。这些是私有文件,它们不能具有全局可见性。
我正在尝试将这些文件上传到受保护的目录(例如,/protected/uploads)。用户必须能够查看这些文件,但它们必须不对客户端浏览器可见。
类似于我的应用程序的“内部视图”。
我该怎么做?
如果我使用“assets”目录,文件将是全局可见的,对吧?
谢谢!
【问题讨论】:
在我的应用程序中,有一些用户上传到服务器的 PDF 文件。这些是私有文件,它们不能具有全局可见性。
我正在尝试将这些文件上传到受保护的目录(例如,/protected/uploads)。用户必须能够查看这些文件,但它们必须不对客户端浏览器可见。
类似于我的应用程序的“内部视图”。
我该怎么做?
如果我使用“assets”目录,文件将是全局可见的,对吧?
谢谢!
【问题讨论】:
您需要发送正确的标头并执行读取文件,例如:
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="yourPDF.pdf"');
header('Content-Length: ' . filesize($filename));
readfile($filename);
这将按照您的要求在浏览器中打开文件,并防止用户直接抓取它。
【讨论】:
你所追求的是请求组件上的一个方法,sendFile。这里简单介绍一下:http://www.yiiframework.com/doc/api/1.1/CHttpRequest#redirect-detail
用法如下:
Yii::app()->request->sendFile($filename, $content);
$filename 将是您希望用户下载的文件的名称
【讨论】: