首页 > php框架 > YII > 正文

利用yii框架实现文件上传与下载功能

王林
发布: 2020-08-17 17:04:01
转载
3226 人浏览过

利用yii框架实现文件上传与下载功能

1、CUploadedFile 实现单文件上传

(推荐教程:yii框架

(1)首先在模型类声明一个属性来储存文件名称(form model或active record model均可)。同样声明一个文件验证规则,以确保被上传文件指定的扩展名。

class Item extends CActiveRecord
{
    public $image;
    // ... other attributes
 
    public function rules()
    {
        return array(
            array('image', 'file', 'types'=>'jpg, gif, png'),
        );
    }
}
登录后复制

(2)然后,在控制器类定义一个action方法收集用户提交的数据

class ItemController extends CController
{
    public function actionCreate()
    {
        $model=new Item;
        if(isset($_POST['Item']))
        {
            $model->attributes=$_POST['Item'];
            $model->image=CUploadedFile::getInstance($model,'image');
            if($model->save())
            {
                $model->image->saveAs('path/to/localFile');
                // redirect to success page
            }
        }
        $this->render('create', array('model'=>$model));
    }
}
登录后复制

(相关教程推荐:php图文教程

(3)最后,创建action视图并生成一个上传的field。

<?php echo CHtml::form(&#39;&#39;,&#39;post&#39;,array(&#39;enctype&#39;=>&#39;multipart/form-data&#39;)); ?>
...
<?php echo CHtml::activeFileField($model, &#39;image&#39;); ?>
...
<?php echo CHtml::endForm(); ?>
登录后复制

2、CUploadedFile实现多文件上传

方法:view视图代码:

for($i=0;$i<3;$i++){
    //echo $form->fileField($model,&#39;xiangguan_tupian[]&#39;).&#39;<br/>&#39;;//这种方法不行
    //echo CHtml::activeFileField($model,&#39;xiangguan_tupian[]&#39;);//这种也不行
    //echo CHtml::fileField(&#39;xiangguan_tupian[]&#39;,&#39;&#39;,array(&#39;id&#39;=>&#39;xiangguan_tupian&#39;.$i)).&#39;&nbsp&#39;;//这种也不行
    echo CHtml::activeFileField($model,&#39;xiangguan_tupian[]&#39;,array(&#39;id&#39;=>&#39;xiangguan_tupian&#39;.$i));
}
?>
登录后复制

controller控制器端:

$model=new Info;
// echo &#39;<hr><br>&#39;;
$obj_array=CUploadedFIle::getInstances($model,&#39;xiangguan_tupian&#39;);
//注意这里不是getInstance而是getInstances多了个s,这样得到的是一个包含CUploadedFile对象的数组
//print_r($obj_array);
foreach($obj_array as $k=>$v){
    $v->saveAs(Yii::app()->basePath.&#39;/&#39;.$k.&#39;_test.&#39;.$v->getExtensionName());
}
登录后复制

多文件上传处理完毕。

(学习视频推荐:php视频教程

要点:

CUploadedFile::getInstance();    // 返回的是一个CUploadedFile对象,
CUploadeFile::getInstanceByName();   //返回的是一个CUploadedFile对象            
CUploadedFile::getInstances()    //返回的是一个值为CUploadedFile对象的数组
CUploadedFile::getInstancesByName();   //返回的是一个值为CUploadedFile对象的数组
登录后复制

3、使用sendFile()来下载文件

$type = LFilter::checkString($_GET[&#39;t&#39;]);
$dataProvider = Book::model()->findByPk($id);
$content = $this->renderPartial(&#39;book&#39;,array(
&#39;dataProvider&#39; => $dataProvider,
&#39;type&#39; => $type,
),true,false);
Yii::app()->request->sendFile($dataProvider->name.&#39;.&#39;.$type,$content);
}
登录后复制

以上是利用yii框架实现文件上传与下载功能的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:csdn.net
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!