使用验证器设置图像最大文件大小

Set image maximum file size with validator

我正在使用文件输入小部件在 Yii2 中实现图像上传,如 http://demos.krajee.com/widget-details/fileinput 所示。请问如何设置上传文件大小限制?

我已添加:

['image', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024 * 1024 * 1024],

在模型的 rules() 中,但它似乎不起作用。

希望有人指教。谢谢。

在视图中:

<?php $form = ActiveForm::begin(['enableClientValidation' => false,  'options' => [ 'enctype' => 'multipart/form-data']]); ?>


<?php

echo $form->field($model, 'image')->widget(FileInput::classname(), [
    'options'=>['accept'=>'image/*', 'multiple'=>true],
    'pluginOptions'=>['allowedFileExtensions'=>['jpg', 'jpeg', 'gif','png']]
]);

?>

<?php ActiveForm::end(); ?>

在控制器中:

    $model = new IMAGEMODEL();  

    Yii::$app->params['uploadPath'] = Yii::$app->basePath . '/web/uploads/PROJECT/';


    if ($model->load(Yii::$app->request->post())) {
        // get the uploaded file instance. for multiple file uploads
        // the following data will return an array
        $image = UploadedFile::getInstance($model, 'image');


        // store the source file name
        $model->FILENAME = $image->name;
        $ext = end((explode(".", $image->name)));

        // generate a unique file name

        $model->AVATAR = Yii::$app->security->generateRandomString().".{$ext}";
        $model->STD_ID=$_POST['IMAGEMODEL']['STD_ID'];


        // the path to save file, you can set an uploadPath
        // in Yii::$app->params (as used in example below)
        $path = Yii::$app->params['uploadPath'] . $model->AVATAR;

        if($model->save()){
            $image->saveAs($path);
            Yii::$app->session->setFlash('success', 'Image uploaded successfully');
            return $this->redirect(['view', 'id'=>$id]);

        } else {
            Yii::$app->session->setFlash('error', 'Fail to save image');
        }
    }

模型中:

public function rules()
{
    return [
        [['STD_ID', 'FILENAME'], 'required'],
        [['FILENAME'], 'string'],
        [['LAST_UPD_ON'], 'safe'],
        [['STD_ID'], 'string', 'max' => 50],
        [['LAST_UPDATE_BY'], 'string', 'max' => 150],

        [['image', 'FILENAME'], 'safe'],
        ['image', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024 * 1024 * 1],

    ];
}

1) maxSize 参数需要字节数。在您的示例中,您设置了 1 Gb。对于 2 Mb,它应该是:

['image', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024 * 1024 * 2],

2) 同时检查 upload_max_filesize INI 设置。

3) 确保在验证之前传递 yii\web\UploadedFile by calling getInstance() method (for multiple files use getInstances()) 的实例:

$this->image = UploadedFile::getInstance($this, 'image');

您可以在 FileInput 小部件的视图 pluginOptions 中设置此 属性:'maxFileSize' => 2048。它将是这样的:

widget(FileInput::classname(), [
    'options' => ['multiple'=>true, 'accept'=>'image/*'],

    'pluginOptions'=>[
        'allowedFileExtensions'=>['jpg','gif','png'],
        ...
        'maxFileSize' => 2048,
        ...
    ]
]);

您还可以使用此设置图像尺寸以及最大文件大小

['image', 'image', 'minWidth' => 250, 'maxWidth' => 250,'minHeight' => 250, 'maxHeight' => 250, 'extensions' => 'jpg, gif, png', 'maxSize' => 1024 * 1024 * 2],

这允许您上传最大 2mb,宽度为 250px,高度为 250px