Yii Framework 开发教程(15) UI 组件 MultiFileUpload示例

来源:互联网 发布:华丽上班族电影知乎 编辑:程序博客网 时间:2024/06/02 11:45


CMultiFileUpload 用于上传文件,支持一次同时上传多个文件。这个UI组件是基于jQuery Multi File Upload 插件。Yii 内置的很多UI组件都是基于JQuery,因此需要创建assets 目录用于存放动态生成的javascripts 等。

所上传的文件的信息可以通过$_FILES[widget-name]来访问,比如,CMultiFileUpload的name为”files” 所上传的文件信息可以通过$_FILES['files']来访问。此外包含CMultiFileUpload的Form属性需要设置enctype=multipart/form-data。

本例创建一个upload目录用于存放上传的文件。我们通过配置文件设置中个上传文件导入目录。

修改/config/main.php 添加项目代码

[php] view plaincopyprint?
  1. // application-level parameters that can be accessed  
  2. // using Yii::app()->params['paramName']  
  3. 'params'=>require(dirname(__FILE__).'/params.php'),  

为Application添加一些参数,存放参数的文件为 config/param.php

定义上传文件的目录如下:

[php] view plaincopyprint?
  1. // this contains the application parameters that can be maintained via GUI  
  2. return array(  
  3.   
  4. //upload directory  
  5. 'uploadDir' => 'upload/',  
  6. );  

在代码中可以通过Yii::app()->params['uploadDir'] 来访问这个参数,对于这个简单的例子,你也可以直接使用upload/ 做为固定的常量而无需定义Application的参数params.

本例不需使用Model,我们定义View如下:

[php] view plaincopyprint?
  1. <div class="form">  
  2. <?php $form=$this->beginWidget('CActiveForm',array(  
  3.   
  4.     'method' =>'post',  
  5.     'htmlOptions'=>array('enctype'=>'multipart/form-data'),  
  6.   
  7.     )); ?>  
  8.   
  9.    <?php $this->widget('CMultiFileUpload',array(  
  10.     'name'=>'files',  
  11.     'accept'=>'jpg|png',  
  12.     'max'=>3,  
  13.     'remove'=>'Remove',  
  14.     //'denied'=>'', message that is displayed when a file type is not allowed  
  15.     //'duplicate'=>'', message that is displayed when a file appears twice  
  16.     'htmlOptions'=>array('size'=>25),  
  17.    )); ?>  
  18.   
  19.     <div class="row submit">  
  20.         <?php echo CHtml::submitButton('Upload'); ?>  
  21.     </div>  
  22.   
  23. <?php $this->endWidget(); ?>  
  24. </div><!-- form -->  
  25.   
  26. <ul>  
  27. <?php foreach($this->findFiles() as $filename): ?>  
  28.     <li><?php echo CHtml::link($filename,  
  29.             Yii::app()->baseUrl.'/'.Yii::app()->params['uploadDir'].$filename,  
  30.     array('rel'=>'external'));?></li>  
  31. <?php endforeach; ?>  
  32. </ul>  

使用CMultiFileUpload上传扩展名为jpg|png 的文件,CMultiFileUpload可以通过配置定义一些选项,具体可以参考

修改其对应的Controller/Action。

[php] view plaincopyprint?
  1. class SiteController extends CController  
  2. {  
  3.     /** 
  4.      * Index action is the default action in a controller. 
  5.      */  
  6.     public function actionIndex()  
  7.     {  
  8.   
  9.         if(isset($_FILES['files']))  
  10.         {  
  11.             // delete old files  
  12.             foreach($this->findFiles() as $filename)  
  13.                 unlink(Yii::app()->params['uploadDir'].$filename);  
  14.   
  15.             //upload new files  
  16.             foreach($_FILES['files']['name'as $key=>$filename)  
  17.                 move_uploaded_file($_FILES['files']['tmp_name'][$key],  
  18.                 Yii::app()->params['uploadDir'].$filename);  
  19.         }  
  20.         $this->render('index');  
  21.     }  
  22.   
  23.     /** 
  24.      * @return array filename 
  25.      */  
  26.     public function findFiles()  
  27.     {  
  28.         return array_diff(scandir(Yii::app()->params['uploadDir']),  
  29.         array('.''..'));  
  30.     }  
  31. }  

Action方法首先删除upload目录下的文件,然后将上传的文件存放到该目录下。

201212125001

本例下载

0 0
原创粉丝点击