首頁  >  文章  >  php框架  >  利用yii框架實作檔案上傳與下載功能

利用yii框架實作檔案上傳與下載功能

王林
王林轉載
2020-08-17 17:04:013229瀏覽

利用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刪除