Stories

Detail Return Return

Yii 使用自帶UploadFile實現文件上傳 - Stories Detail

在Yii中我們可以使用Yii自帶的yii\web\UploadedFile類來實現文件上傳

一:創建一個上傳的模型類(UploadForm)

<?php
namespace app\models;
use yii\base\Model;
/**
 *上傳模型類
 */
class UploadForm extends Model
{
    /**
     * @var UploadedFile
     */
    public $imageFile;
    
    //上傳驗證
    public function rules()
    {
        return [
            [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, xlsx'],
        ];
    }
    /**
     * function: upload
     * author: wangjian
     * date: 2019/5/7 16:33
     * 文件上傳
     */
    public function upload()
    {
        if ($this->validate()) {
            $dir = 'uploads/';
            $fileName = time();
            //判斷上傳目錄是否存在,不存在創建一個目錄
            if (!is_dir($dir)) {
                mkdir($dir);
            }
            //確定上傳文件路徑
            $filePath = $dir . $fileName . '.' . $this->imageFile->extension;
            //上傳文件
            $this->imageFile->saveAs($filePath);
            return $filePath;
        } else {
            //上傳失敗
            return false;
        }
    }
}

如果使用Yii自帶的yii\web\UploadedFile類來實現文件上傳的話,上傳文件的視圖可以使用yii\widgets\ActiveForm部件來創建上傳表單,例:

<?php
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
<?= $form->field($model, 'imageFile')->fileInput() ?>
    <button>上傳</button>
<?php ActiveForm::end() ?>

如果你不想要使用<?= $form->field($model, 'imageFile')->fileInput() ?>來創建上傳控件的話,你使用input來創建上傳控件時,這時候input上傳控件的name參數必須設置為:

//上傳模型類名[上傳文件名]
UploadForm[imageFile]

二:上傳控制器:

//獲取上傳信息
$model->imageFile = UploadedFile::getInstance($model, 'imageFile');
//上傳
$upload = $model->upload();
if ($upload) {
    // 文件上傳成功
}else {
    //文件上傳失敗
}

這時候我們就可以實現文件上傳功能了

user avatar ivictor Avatar wenroudemangguo Avatar renxingdebenma Avatar fu_623f04ad34d53 Avatar yansudeshanyang Avatar
Favorites 5 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.