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 屬性用於保持檔案的範例。這裡檔案驗證規則是確保檔案有一個 PNG 或 JPG 格式擴充套件名。upload()函式驗證該檔案並將其儲存在伺服器上。

第2步 - 現在,新增 actionLoadImage() 方法到 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步 - 存取 http://localhost:8080/index.php?r=site/upload-image, 會看到下面的輸出結果:
Yii文件上傳

第6步- 選擇要上傳的圖片,並點選「提交」按鈕。該檔案將儲存在伺服器上的 「uploads」 檔案夾內。