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('','post',array('enctype'=>'multipart/form-data')); ?>...<?php echo chtml::activefilefield($model, 'image'); ?>...<?php echo chtml::endform(); ?>
2、cuploadedfile实现多文件上传
方法:view视图代码:
for($i=0;$i<3;$i++){ //echo $form->filefield($model,'xiangguan_tupian[]').'<br/>';//这种方法不行 //echo chtml::activefilefield($model,'xiangguan_tupian[]');//这种也不行 //echo chtml::filefield('xiangguan_tupian[]','',array('id'=>'xiangguan_tupian'.$i)).' ';//这种也不行 echo chtml::activefilefield($model,'xiangguan_tupian[]',array('id'=>'xiangguan_tupian'.$i));}?>
controller控制器端:
$model=new info;// echo '<hr><br>';$obj_array=cuploadedfile::getinstances($model,'xiangguan_tupian');//注意这里不是getinstance而是getinstances多了个s,这样得到的是一个包含cuploadedfile对象的数组//print_r($obj_array);foreach($obj_array as $k=>$v){ $v->saveas(yii::app()->basepath.'/'.$k.'_test.'.$v->getextensionname());}
多文件上传处理完毕。
(学习视频推荐:php视频教程)
要点:
cuploadedfile::getinstance(); // 返回的是一个cuploadedfile对象,cuploadefile::getinstancebyname(); //返回的是一个cuploadedfile对象 cuploadedfile::getinstances() //返回的是一个值为cuploadedfile对象的数组cuploadedfile::getinstancesbyname(); //返回的是一个值为cuploadedfile对象的数组
3、使用sendfile()来下载文件
$type = lfilter::checkstring($_get['t']);$dataprovider = book::model()->findbypk($id);$content = $this->renderpartial('book',array('dataprovider' => $dataprovider,'type' => $type,),true,false);yii::app()->request->sendfile($dataprovider->name.'.'.$type,$content);}
以上就是利用yii框架实现文件上传与下载功能的详细内容。