将文件上载到文件夹并将名称保存到yii2中的数据库

将文件上载到文件夹并将名称保存到yii2中的数据库,yii2,Yii2,下午好! 有一个关于文件上传到yii2的问题。其中有两个文件夹将存储原始图像和缩略图。此时会加载文件,但此处不会在数据库中加载文件名 模型 namespace app\models; use yii\base\Model; use yii\db\ActiveRecord; use yii\web\UploadedFile; use yii\imagine\Image; use Imagine\Image\Box; /** * This is the model class for tab

下午好! 有一个关于文件上传到yii2的问题。其中有两个文件夹将存储原始图像和缩略图。此时会加载文件,但此处不会在数据库中加载文件名

模型
namespace app\models;

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

use yii\imagine\Image;
use Imagine\Image\Box;

/**
 * This is the model class for table "images".
 *
 * @property integer $id
 * @property string $original_image
 * @property string $prev_image
 */
class Images extends ActiveRecord
{

    public $imageFile;
    public $file_name;

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'images';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['prev_image'], 'string', 'max' => 255],
            [['original_image'], 'string'],
            [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg', 'maxSize' => 1024 * 1024 * 7],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'original_image' => 'Original Image',
            'prev_image' => 'Prev Image',
        ];
    }

    public function upload()
    {
        $temp=substr(md5(microtime() . rand(0, 9999)), 0, 20);

        if ($this->validate()) {
            $this->imageFile->saveAs('uploads/original/'.$temp.$this->imageFile->baseName . '.' . $this->imageFile->extension);
            $imagine = Image::getImagine();
            $image = $imagine->open('uploads/original/' . $temp.$this->imageFile);
            $image->resize(new Box(250, 150))->save('uploads/prev/' . $temp.$this
                    ->imageFile->baseName . '.' . $this->imageFile->extension, ['quality' => 70]);
            $this->file_name=$temp.$this->imageFile->baseName . '.' . $this->imageFile->extension;

            return true;
        } else {
            return false;
        }
    }
}
控制器
namespace app\controllers;


use app\models\Images;
use Yii;
use yii\web\UploadedFile;

class ImageController extends \yii\web\Controller
{

        public function actionUpload()
    {
        $model = new Images();


        if ($model->load(Yii::$app->request->post())) {

            $model->imageFile = UploadedFile::getInstance($model, 'imageFile');
            $model->prev_image=$model->file_name;
            $model->original_image=$model->file_name;
            $model->save();

            if ($model->upload()) {
                return;
            }
        }

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

}

如何在数据库中保存文件名的问题?提前感谢

这是因为保存发生在uplaod操作之前,但您只在upload函数中定义文件名。保存是将其保存到数据库中的操作

控制器应如下所示:

namespace app\controllers;


use app\models\Images;
use Yii;
use yii\web\UploadedFile;

class ImageController extends \yii\web\Controller
{

        public function actionUpload()
    {
        $model = new Images();


        if ($model->load(Yii::$app->request->post())) {

            $model->imageFile = UploadedFile::getInstance($model, 'imageFile');
            $model->prev_image=$model->file_name;
            $model->original_image=$model->file_name;
            $model->save();

            if ($model->upload()) {
                return;
            }
        }

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

}
namespace app\controllers;

use app\models\Images;
use Yii;
use yii\web\UploadedFile;

class ImageController extends \yii\web\Controller
{
    public function actionUpload(){

        $model = new Images();

        if ($model->load(Yii::$app->request->post())) {
            $uploadedFile = UploadedFile::getInstance($model, 'imageFile');
            $model->imageFile = $uploadedFile; 
            $model->prev_image = $uploadedFile->name 
            $model->original_image = $uploadedFile->name 
            $model->save();

            if ($model->upload()) {
                return;
            }
        }

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