我在Yii中有一个受保护的文件夹,我希望在网站中显示一些这些图像。我已经尝试了以下代码,它在站点/索引控制器中工作,因为它只返回我想要的图像。
然而,当我试图分开代码时,它不起作用。任何帮助表示赞赏。
模型
public function getImage() // will take file identifier as @param
{
$imageID = '2562584569'; // will eventually be dynamically assigned
$image = Images::model()->find('tmp_name=:id', array('id' => $imageID));
$dest = Yii::getPathOfAlias('application.uploads');
$file = $dest .'/' . $image->tmp_name . '.' . $image->extension;
if(file_exists($file)){
ob_clean();
header('Content-Type:' . $image->logo_type);
readfile($file);
exit;
}
}
在视图中
CHtml::link('<img src="' . Yii::app()->request->baseUrl .'/images/image" />', array('product/index', 'id'=>$data['product_id'], 'slug'=> $data['product_slug']));
由于
Jonnny
答案 0 :(得分:2)
“protected”文件夹。这可以防止人们访问重要文件,例如源代码。
如果您想将图像存储在“受保护”内并希望它们可供访问,则需要使用CAssetManager
发布它们。
用法类似于:
$path = Yii::app()->basePath.'/path-inside-protected';
$yourImageUrl = Yii::app()->assetManager->publish($path);
然后Yii将该文件用作资产,将其复制到“assets”文件夹,同时将其“保护”。之后,您只需使用HTML上返回的网址即可。
<img src="<?php echo $yourImageUrl ?>">
答案 1 :(得分:1)
我这样做了
CHtml::link('<img src="' . $this->createUrl('/images/image', array('data'=>$data['data'])) . '" />', array('product/index', 'id'=>$data['product_id'], 'slug'=> $data['product_slug']));
<强>模型强>
public function actionImage($data)
{
$image = Images::model()->find('tmp_name=:data', array('id' => $data));
$dest = Yii::getPathOfAlias('application.uploads');
$file = $dest .'/' . $image->tmp_name . '.' . $image->extension;
if(file_exists($file)){
ob_clean();
header('Content-Type:' . $image->logo_type);
readfile($file);
exit;
}
}
感谢您的帮助