显示上传的图片yii

时间:2012-04-27 10:20:50

标签: yii

我是php和yii的新手。我的表单中有一个文件字段来上传图片。我使用以下代码使用文件字段上传图像。

视图中的代码:

<?php echo $form->fileField($model,'logo', array('class'=>'input-file')); ?>
    <img src="<?php 
        echo Yii::app()->request->baseUrl.'/protected/uploads/sitelogo/'.$savedvalues['varLogo']; 
    ?>" width="50" height="50" />
    <?php echo $form->hiddenField($model,'hiddenfile',
            array('value'=>$savedvalues['varLogo'])); ?> 
控制器中的

代码:

$randnum = rand(0,100);
$home->varLogo = $randnum.$model->logo;
$file= Yii::app()->getBasePath().'/uploads/sitelogo/'.$randnum.$model->logo;
$model->logo->saveAs($file);    

图片现在上传得很好。我已将上传的图像保存在protected\uploads\文件夹中。我试图在编辑图像部分显示上传的图像。但图像无法显示。它在firebug中显示failed to load the given url

如何更正此问题?

3 个答案:

答案 0 :(得分:2)

protected文件夹因某些原因受到保护 - 没有人可以访问它

如果您想要访问图片,请将其移至public文件夹(或public/uploaded

这里是.htaccess

protected内容
deny from all

EDIT:

当然,如果你想为你的用户提供一些ACL,你可以把你的文件放到受保护的文件夹中(或者使uploaded文件夹也不可访问),然后通过脚本(类)检查访问,读取和输出文件

在视图中:

<img src="<?php 
    echo Yii::app()->request->baseUrl.'/image.php?url=protected/uploads/sitelogo/'.$savedvalues['varLogo']; 
?>" width="50" height="50" />

在您的控制器或班级中:

if (Yii::app()->session['user_can_access_files']) {
    header('Content-Type: image/jpeg');
    readfile($_GET['url']);
} else {
    Yii::app()->user->loginRequired();
}

答案 1 :(得分:0)

警告:我是一个非常棒的人,所以拿这个带一粒盐:) 我采取了类似的方法,但有用户特定的文件夹&amp;添加了MIME类型检查。 我以类似的方式上传文件,然后在视图中查看它们:

echo '<embed src="/tim_0.5/index.php/files/Getdatafile/' . $modelid . '" width=100% height=400>';

从我的控制器我有:

public function actionGetdatafile($id)
    {
        $model=$this->loadModel($id);
        $imgpath = $model->user_id . '/' . $model->filename;
        $file=Yii::app()->getBasePath().'/datafiles/'.$imgpath;

        if (file_exists($file))
        {
            $img=getimagesize($file);
            header('Content-Type: '.$img['mime']);
            readfile($file);
            exit;
        } else {
        echo 'File not found!';
        }
    }

答案 2 :(得分:0)

<b><?php echo CHtml::encode($data->getAttributeLabel('binaryfile')); ?>:</b>

<?php  echo CHtml::image(Yii::app()->request->baseUrl.'/upload/'.$data->fileName); ?>
<br />

filename是您存储在根目录中的上传文件夹中的文件的名称。

(Yii::app()->request->baseUrl.'/upload/' point to your upload folder which is in your root directory

希望它有效......