yii2.0单文件上传和多文件上传

Posted HongEternity

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yii2.0单文件上传和多文件上传相关的知识,希望对你有一定的参考价值。

yii2文件上传使用到yii2自带的文件上传类UploadFIle,以及对应的模型规则,这里分别介绍单文件上传和多文件上传:

 

yii2单个文件上传:

上传步奏,先创建上传表单模型model(包含验证规则),其次控制器操作action,以及相对应的view:

model层:

Upload.php  [单文件上传模型]

<?php

namespace app\models;
use Yii;
use yii\base\Model;

class Upload extends Model{
public $file;


public function rules(){
return [

[[‘file‘], ‘file‘, ‘extensions‘ => ‘jpg, png‘, ‘mimeTypes‘ => ‘image/jpeg, image/png‘,],
];
}


public function attributeLabels(){
return [
‘file‘=>‘文件上传‘
];
}
}

UploadForm.php  [多文件上传模型]

<?php
namespace app\models;

use Yii;
use yii\base\Model;

class UploadForm extends Model
{
/**
* @var UploadedFile|Null file attribute
*/
public $file;

/**
* @return array the validation rules.
*/
public function rules()
{
return [
[[‘file‘], ‘file‘, ‘maxFiles‘ => 10,‘extensions‘=>‘jpg,png,gif‘],
];
}

public function attributeLabels(){
return [
‘file‘=>‘多文件上传‘
];
}

Controller层,以TestController中的upload操作和upmore操作

<?php  
namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\Upload;
use app\models\UploadForm;
use yii\web\UploadedFile;

class TestController extends Controller{

public function actionIndex(){
return $this->renderPartial(‘index‘);
}

/**
* @return string|\yii\web\Response
* 单文件上传
*/
public function actionUpload(){
$model= new Upload();

if (Yii::$app->request->isPost) {
$file = UploadedFile::getInstance($model, ‘file‘);
$path=‘uploads/‘.date("YmdH",time()).‘/‘;
if ($file && $model->validate()) {
if(!file_exists($path)){
mkdir($path,0775,true);
}
$file->saveAs($path . time() . ‘.‘ . $file->getExtension());
Yii::$app->session->setFlash(‘success‘,‘上传成功!‘);
return $this->redirect(‘upload‘);
}
}

return $this->render(‘upload‘,[‘model‘=>$model]);
}


public function actionUpmore(){
$model = new UploadForm();
if (Yii::$app->request->isPost) {
$file = UploadedFile::getInstances($model, ‘file‘);

if ($file && $model->validate()) {
echo "<pre/>";

foreach ($file as $fl) {
$fl->saveAs(‘uploads/‘ .mt_rand(1100,9900) .time() .$fl->baseName. ‘.‘ . $fl->extension);
}
Yii::$app->session->setFlash(‘success‘,‘上传成功!‘);
return $this->redirect(‘upmore‘);
}
}

return $this->render(‘upmore‘, [‘model‘ => $model]);
}
}

view:层

[单文件view  uplod.php]

<?php  
use yii\helpers\html;
use yii\widgets\ActiveForm;
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h4>文件上传</h4>
<?php if(Yii::$app->session->hasFlash(‘success‘)):?>
<div class="alert alert-danger">
<?=Yii::$app->session->getFlash(‘success‘)?>
</div>
<?php endif ?>
<?php $form=ActiveForm::begin([
‘id‘=>‘upload‘,
‘enableAjaxValidation‘ => false,
‘options‘=>[‘enctype‘=>‘multipart/form-data‘]
]);
?>
<?= $form->field($model, ‘file‘)->fileInput();?>
<?= Html::submitButton(‘提交‘, [‘class‘=>‘btn btn-primary‘,‘name‘ =>‘submit-button‘]) ?>
<?php ActiveForm::end(); ?>

</body>
</html>
[多文件view upmore.php]
<?php  

use yii\helpers\Html;
use yii\widgets\ActiveForm;

?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h4>多文件上传</h4>
<?php if(Yii::$app->session->hasFlash(‘success‘)):?>
<div class="alert alert-danger">
<?=Yii::$app->session->getFlash(‘success‘)?>
</div>
<?php endif ?>
<?php $form=ActiveForm::begin([
‘id‘=>‘upload‘,
‘enableAjaxValidation‘ => false,
‘options‘=>[‘enctype‘=>‘multipart/form-data‘]
]);
?>
<?= $form->field($model, ‘file[]‘)->fileInput([‘multiple‘ => true]);?>
<?= Html::submitButton(‘提交‘, [‘class‘=>‘btn btn-primary‘,‘name‘ =>‘submit-button‘]) ?>
<?php ActiveForm::end(); ?>

</body>
</html>  

 
















































































































































































以上是关于yii2.0单文件上传和多文件上传的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot 单文件和多文件上传

表单中的单文件上传和多文件上传

MultipartFile实现单文件和多文件上传并带参数

基于Struts2的单文件和多文件上传

Ueditor1.4.3实现跨域上传到独立文件服务器,完美解决单文件和多文件上传!

Yii2.0 多文件上传