在Yii中咱们能够应用Yii自带的yii\web\UploadedFile类来实现文件上传
一:创立一个上传的模型类(UploadForm)
<?phpnamespace 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部件来创立上传表单,例:
<?phpuse 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 { //文件上传失败}
这时候咱们就能够实现文件上传性能了