Yii - 檔案上傳



您可以藉助yii\web\UploadedFile、模型yii\widgets\ActiveForm輕鬆實現檔案上傳功能。

在根資料夾中建立一個名為“uploads”的目錄。此目錄將儲存所有上傳的影像。要上傳單個檔案,您需要建立一個模型和一個用於上傳檔案例項的模型屬性。您還應該驗證檔案上傳。

步驟 1 - 在models資料夾中,建立一個名為UploadImageForm.php的檔案,內容如下。

<?php
   namespace app\models;
   use yii\base\Model;
   class UploadImageForm extends Model {
      public $image;
      public function rules() {
         return [
            [['image'], 'file', 'skipOnEmpty' => false, 'extensions' => 'jpg, png'],
         ];
      }
      public function upload() {
         if ($this->validate()) {
            $this->image->saveAs('../uploads/' . $this->image->baseName . '.' .
               $this->image->extension);
            return true;
         } else {
            return false;
         }
      }
   }
?>

image屬性用於儲存檔案例項。file驗證規則確保檔案具有pngjpg副檔名。upload函式驗證檔案並將其儲存在伺服器上。

步驟 2 - 現在,將actionUploadImage函式新增到SiteController

public function actionUploadImage() {
   $model = new UploadImageForm();
   if (Yii::$app->request->isPost) {
      $model->image = UploadedFile::getInstance($model, 'image');
      if ($model->upload()) {
         // file is uploaded successfully
         echo "File successfully uploaded";
         return;
      }
   }
   return $this->render('upload', ['model' => $model]);
}

步驟 3 - 提交表單時,我們呼叫yii\web\UploadedFile::getInstance()函式將上傳的檔案表示為UploadedFile例項。然後,我們驗證檔案並將其儲存在伺服器上。

步驟 4 - 接下來,在views/site目錄中建立一個upload.php檢視檔案。

<?php
   use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']])?>
<?= $form->field($model, 'image')->fileInput() ?>
   <button>Submit</button>
<?php ActiveForm::end() ?>

上傳檔案時,請記住新增enctype選項。fileInput()方法呈現以下html程式碼:

<input type = "file">

以上html程式碼允許使用者選擇和上傳檔案。

步驟 5 - 現在,如果您訪問https://:8080/index.php?r=site/upload-image,您將看到以下內容。

Select Upload Files

步驟 6 - 選擇要上傳的影像並單擊“提交”按鈕。該檔案將儲存在伺服器上的“uploads”資料夾中。

Uploads
廣告