1

我在 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']));

谢谢

乔尼

4

2 回答 2

2

无法从客户端浏览器访问“受保护”文件夹。这可以防止人们访问重要文件,例如您的源代码。

如果要将图像存储在“受保护”中并希望它们可以访问,则需要使用CAssetManager.

用法类似于:

$path = Yii::app()->basePath.'/path-inside-protected';
$yourImageUrl = Yii::app()->assetManager->publish($path);

Yii 将使用该文件作为资产,将其复制到“assets”文件夹,与“protected”同级。之后,您可以使用 HTML 中返回的 url。

<img src="<?php echo $yourImageUrl ?>">
于 2013-07-26T20:56:16.973 回答
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;
}

}

感谢所有帮助

于 2013-07-28T19:45:18.500 回答