Yii2.0 多文件上传

---------------------------------------------------------------------------------------------------

首先你得调整模型类,在 file 验证规则里增加一个 maxFiles 选项,用以限制一次上传文件的最大数量。 

upload()方法也得修改, 以便一个一个地保存上传的文件。

---------------------------------------------------------------------------------------------------

namespace app\models;

use yii\base\Model;
use yii\web\UploadedFile;

class UploadForm1 extends Model{
    /**
     * @var UploadedFile[]
     */
    public $imageFiles;

    public function rules()
    {
        return [
            [['imageFiles'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg', 'maxFiles' => 4],
        ];
    }    
    public function upload()
    {
        foreach ($this->imageFiles as $file) {
            $file->saveAs('./upload/' . $file->baseName . '.' . $file->extension);
        }
        return true;
    }
}

--------------------------------------------------------------------------------------------------------------

在视图文件里,你需要把 multiple 选项添加到fileInput()函数调用里, 这样文件输入控件就可以接收多个文件。

---------------------------------------------------------------------------------------------------------------

use yii\widgets\ActiveForm;
use yii\helpers\Url;
?>

['enctype' => 'multipart/form-data']]) ?>



  
  



  
  


-------------------------------------------------------------------------------------------------------------

最后,在控制器的 action 方法中,你应该调用 UploadedFile::getInstances() 而不是 UploadedFile::getInstance() 来把UploadedFile 实例数组赋值给 UploadForm::imageFiles

------------------------------------------------------------------------------------------------------------

namespace backend\controllers;

use Yii;
use yii\web\Controller;
use app\models\UploadForm1;
use yii\web\UploadedFile;

class PhotoController extends Controller
{

    public $enableCsrfValidation = false;
    public function actionIndex()
    {
        $request = Yii::$app->request;
        $model = new UploadForm1();
        if($request->isPost)
        {
            $file=$model->imageFiles = UploadedFile::getInstances($model, 'imageFiles');
            //print_r($file);die;
            foreach ($file as $key => $v) {
                $image[]=$v->name;                
            }
            //print_r($image);die;  
            $images=implode(',',$image);
            if($model->upload())
            {
                $connection = \Yii::$app->db;
                $connection->createCommand()->insert('upload', [
                    'image' => $images,
                ])->execute();
            }          
        }
        else
        {
            return $this->render('upload1',['model' => $model]);
        }
    }
}

转载于:https://www.cnblogs.com/bluealine/p/5334081.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

上传多个图片field($model, 'imageFiles[]')->fileInput(['multiple' => true, 'accept' => 'image/*']) ?>