1. 程式人生 > >yii2 圖片上傳

yii2 圖片上傳

yii 上傳圖片

以新聞為例:首先在新聞的ActiveRecord添加規則:

[[‘image‘], ‘file‘, ‘extensions‘ => ‘png, jpg, gif‘],

再定義上傳路徑

由於我把入口文件移動到了web目錄下,目錄結構如下:

技術分享


index.php

<?php
defined(‘YII_DEBUG‘) or define(‘YII_DEBUG‘, true);
defined(‘YII_ENV‘) or define(‘YII_ENV‘, ‘dev‘);

require(__DIR__ . ‘/../vendor/autoload.php‘);
require(__DIR__ . ‘/../vendor/yiisoft/yii2/Yii.php‘);
require(__DIR__ . ‘/../common/config/bootstrap.php‘);
require(__DIR__ . ‘/../frontend/config/bootstrap.php‘);

$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . ‘/../common/config/main.php‘),
    require(__DIR__ . ‘/../common/config/main-local.php‘),
    require(__DIR__ . ‘/../frontend/config/main.php‘),
    require(__DIR__ . ‘/../frontend/config/main-local.php‘)
);

(new yii\web\Application($config))->run();


admin/index.php

<?php
defined(‘YII_DEBUG‘) or define(‘YII_DEBUG‘, true);
defined(‘YII_ENV‘) or define(‘YII_ENV‘, ‘dev‘);

require(__DIR__ . ‘/../../vendor/autoload.php‘);
require(__DIR__ . ‘/../../vendor/yiisoft/yii2/Yii.php‘);
require(__DIR__ . ‘/../../common/config/bootstrap.php‘);
require(__DIR__ . ‘/../../backend/config/bootstrap.php‘);

$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . ‘/../../common/config/main.php‘),
    require(__DIR__ . ‘/../../common/config/main-local.php‘),
    require(__DIR__ . ‘/../../backend/config/main.php‘),
    require(__DIR__ . ‘/../../backend/config/main-local.php‘)
);

(new yii\web\Application($config))->run();



上傳路徑: common/bootstrap.php

Yii::setAlias([email protected], dirname(dirname(__DIR__)) . ‘/web/uploads‘);

同時定義了跟目錄:

Yii::setAlias([email protected], dirname(dirname(__DIR__)) . ‘/web‘);


上傳圖片類:common/models/UploadForm.php

<?php
namespace common\models;

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

/**
 * This is the model class for upload.
 *
 * @property string $path 
 */
class UploadForm extends Model{

	/**
	* 上傳圖片
	* @image_type common, news, product, cases, ad, category, downloads, friend_link
	*
	*/
	public static function uploads($upfile, $old_image = ‘‘, $image_type = ‘common‘){
		$upload_time = date("Ymd");
		$upload_type_path = $image_type . ‘/‘ . $upload_time . ‘/‘;
		//上傳路徑
		$upload_save_path = Yii::getAlias([email protected]) . ‘/‘ . $upload_type_path;
		if(!file_exists($upload_save_path)){
			@mkdir($upload_save_path);
		}
		//保存路徑
		$upload_save_url = yii::$app->params[‘uploads_dir‘] . ‘/‘ . $upload_type_path;

		$uploaded_file=UploadedFile::getInstanceByName($upfile);
		if($uploaded_file === null || $uploaded_file->hasError){
            return $old_image;
        }

        //圖片名稱
        $file_name = $uploaded_file->getBaseName();

        //圖片格式
        $file_ext = $uploaded_file->getExtension();

        //新文件名
        $new_file_name=date("YmdHis") . rand(10000,99999). ‘.‘ .$file_ext;

        //刪除舊文件
        if(!empty($old_image)){
            @unlink(Yii::getAlias([email protected]) . ‘/‘ . $old_image);
        }

        $uploaded_file->saveAs($upload_save_path . $new_file_name);

        return $upload_save_url . $new_file_name;
	}
    
}
?>

然後再新聞的ActiveRecord中保存前操作:

public function beforeSave($insert)
    {
        $old_image = Yii::$app->request->post()[‘old_image‘];
        $uploaded_file=UploadForm::uploads("News[image]", $old_image, ‘news‘); 
        $this->image = $uploaded_file;
        return parent::beforeSave($insert);
    }


yii2 圖片上傳