我创建了一个在我的站点中上传和下载文件的功能。但我想验证下载功能。如果用户已经登录到我的站点并获得下载权限,我想允许用户下载文件。
帮我。如何检查会话是否存在?我正在 /app/webroot/documents/users/ 路径中上传文件。
生成的下载链接如下:http://localhost/my_project/documents/users/TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx.jpg
谢谢你们。
我创建了一个在我的站点中上传和下载文件的功能。但我想验证下载功能。如果用户已经登录到我的站点并获得下载权限,我想允许用户下载文件。
帮我。如何检查会话是否存在?我正在 /app/webroot/documents/users/ 路径中上传文件。
生成的下载链接如下:http://localhost/my_project/documents/users/TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx.jpg
谢谢你们。
处理此问题的最简单方法是使用 AuthComponent 进行身份验证,使用 MediaView 处理来自页面上“下载此文件”链接的下载提示。
一个例子。
class SomeController extends AppController {
...
public $components = array(
'Auth' => array(
... auth settings ...
),
...
);
public function download( ){
$this->view = 'Media';
$this->set( array(
'id' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx.jpg',
'name' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx',
'download' => true,
'extension' => 'jpg',
'path' => join( DS, array(
APP, 'webroot', 'documents', 'users', ''
))
));
}
这假设您将下载操作作为与 AuthComponent 相关的受限操作。如果您允许下载操作,您可以将 MediaView 代码包装在 Auth->user( ) 检查中,如下所示。
public function download( ){
if( $this->Auth->user( )){
$this->view = 'Media';
$this->set( array(
'id' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx.jpg',
'name' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx',
'download' => true,
'extension' => 'jpg',
'path' => join( DS, array(
APP, 'webroot', 'documents', 'users', ''
))
));
} else {
... do something else here ...
}
}
这只是检查 Auth 是否将有效的用户对象保存到会话中。这只应在有用户登录时发生。
几点注意事项:
我在 join( DS, array( 'path', 'parts', '' ) 调用的末尾使用了一个空白数组条目来获取路径所需的尾部斜杠。随心所欲地做 - 我部分加入我自己在构建重复的字符串或路径时。
http://book.cakephp.org/view/489/Media-Views
http://book.cakephp.org/view/563/Setting-Auth-Component-Variables
我可能会设置一些东西,所以你不会给他们一个直接的下载链接。我通常设置一个 AttachmentsController,带有一个 download() 方法。然后您可以运行所有您想要的权限检查(并保留文件的统计信息等)
在这种情况下,您可以让控制器在启用下载之前检查会话变量。
如果您使用的是 Session 组件,您可以使用以下内容在您的用户操作中检查用户的状态:
if($this->Session->read('Auth.User.id'))
{
//download file
}
不过,如何提供文件取决于您自己,但该会话检查应该在您用于提供文件的任何内容中工作,例如 Travis Leleu 的 AttachmentsController。