Yii2-如何在数据库中上传和存储图像

时间:2018-10-25 06:22:29

标签: php file-upload yii2

我正在使用yii2。我正在尝试选择一个文件,然后将其保存到我的数据库表中。我正在使用core PHP。以下是我的代码

<form action = <?=\yii\helpers\Url::toRoute(['meteracceptanceheader/import'])?> method ="post"
           enctype="multipart/form-data">
.
.
.
.
.
.
.

<div class="row">
                <div class="col-md-2">

                    Upload-Image
                    <input type="file" name="file"/>
                    <br />
                    <input type="submit" class="btn btn-primary pull-left"  />
                </div>
            </div>
</form>

控制器

public function actionImport()
{

    .
    .
    . // my other code

    $file = $_FILES['file'];
    $fileName = $_FILES['file']['name'];
    $fileExt = explode('.',$fileName);
    print_r($file);
    die();
    .
    .
    .
    .

return $this->render('excel_finish', ['records_saved' => $ok_count,'status_arr'=>$status_arr]);
}

数据库表

enter image description here

在上表中,id是自动增量accpt_id是我已经拥有的model idfile_path是应该保存的文件名,例如123.jpg

该文件应保存到文件夹uploads/meter_acceptance/中,并附加文件名。

注意:

我已经知道如何通过活动表单上传图像,但是在这里,我想以传统方式进行上传。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的控制器应该是这样

public function actionUpload(){

    $model = new Images();
    $uploadPath = Yii::getAlias('@root') .'/uploads/';

    if (isset($_FILES['image'])) {
        $file = \yii\web\UploadedFile::getInstanceByName('image');
      $original_name = $file->baseName;  
      $newFileName = \Yii::$app->security
                        ->generateRandomString().'.'.$file->extension;
       // you can write save code here before uploading.
        if ($file->saveAs($uploadPath . '/' . $newFileName)) {
            $model->image = $newFileName;
            $model->original_name = $original_name;
            if($model->save(false)){
                echo \yii\helpers\Json::encode($file);
            }
            else{
                echo \yii\helpers\Json::encode($model->getErrors());
            }

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

    return false;
}