当前位置: 代码迷 >> .NET Framework >> Yii Framework 开发课程(15) UI 组件 MultiFileUpload示例
  详细解决方案

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

热度:295   发布时间:2016-05-01 23:59:07.0
Yii Framework 开发教程(15) UI 组件 MultiFileUpload示例

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 添加项目代码

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

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

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

// this contains the application parameters that can be maintained via GUIreturn array(//upload directory'uploadDir' => 'upload/',);

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

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

<div class="form"><?php $form=$this->beginWidget('CActiveForm',array(	'method' =>'post',	'htmlOptions'=>array('enctype'=>'multipart/form-data'),	)); ?>   <?php $this->widget('CMultiFileUpload',array(   	'name'=>'files',   	'accept'=>'jpg|png',   	'max'=>3,   	'remove'=>'Remove',   	//'denied'=>'', message that is displayed when a file type is not allowed   	//'duplicate'=>'', message that is displayed when a file appears twice   	'htmlOptions'=>array('size'=>25),   )); ?>    <div class="row submit">        <?php echo CHtml::submitButton('Upload'); ?>    </div><?php $this->endWidget(); ?></div><!-- form --><ul><?php foreach($this->findFiles() as $filename): ?>	<li><?php echo CHtml::link($filename,			Yii::app()->baseUrl.'/'.Yii::app()->params['uploadDir'].$filename,	array('rel'=>'external'));?></li><?php endforeach; ?></ul>

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

修改其对应的Controller/Action。

class SiteController extends CController{	/**	 * Index action is the default action in a controller.	 */	public function actionIndex()	{		if(isset($_FILES['files']))		{			// delete old files			foreach($this->findFiles() as $filename)				unlink(Yii::app()->params['uploadDir'].$filename);			//upload new files			foreach($_FILES['files']['name'] as $key=>$filename)				move_uploaded_file($_FILES['files']['tmp_name'][$key],				Yii::app()->params['uploadDir'].$filename);		}		$this->render('index');	}	/**	 * @return array filename	 */	public function findFiles()	{		return array_diff(scandir(Yii::app()->params['uploadDir']),		array('.', '..'));	}}

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

201212125001

本例下载


  相关解决方案