首頁  >  文章  >  php框架  >  Yii框架中的檔案上傳與下載:實作檔案相關操作

Yii框架中的檔案上傳與下載:實作檔案相關操作

王林
王林原創
2023-06-21 09:44:261221瀏覽

Yii框架是一款基於PHP語言的MVC框架,其主要特點是快速開發、簡單且有效率。在網站開發中,文件上傳和下載是一個常見的功能,本文將介紹如何在Yii框架中實現文件上傳和下載。

一、檔案上傳

1.準備工作

在進行檔案上傳之前,我們需要先進行相關的設定。開啟config/main.php文件,在元件中加入以下程式碼:

'components' => [
      'request' => [
        'parsers' => [
          'application/json' => 'yiiwebJsonParser',
          'multipart/form-data' => 'yiiwebMultipartFormDataParser',
        ],
      ],
        'request' => [
        'enableCsrfCookie' => false,
        'enableCsrfValidation' => false,
        'parsers' => [
          'multipart/form-data' => 'yiiwebMultipartFormDataParser',
        ],
      ],
        'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
        ],
      ],
 
  ],

在元件中加入了兩個request參數,分別是parsers和enableCsrfValidation。 parsers是請求的解析器​​,新增multipart/form-data表示允許上傳檔案。 enableCsrfValidation表示關閉CSRF驗證。

2.實作檔案上傳

在控制器中實作檔案上傳,可以選擇form表單提交或Ajax上傳。此處以form表單提交為例。

public function actionUpload()
    {
        $uploadModel = new UploadForm();
 
        if (Yii::$app->request->isPost) {
            $uploadModel->file = UploadedFile::getInstance($uploadModel, 'file');
            if ($uploadModel->upload()) {
                // file is uploaded successfully
                return;
            }
        }
 
        return $this->render('upload', ['model' => $uploadModel]);
    }

在actionUpload中,實例化了一個上傳檔案的模型類別UploadForm。同時,使用了Yii::$app->request->isPost來判斷是否是POST請求,如果是,則使用Yii::$app->request->getInstance()方法獲取文件信息,並呼叫upload()方法進行檔案上傳。上傳成功回傳true,失敗則回傳false。

UploadForm類別實作程式碼如下:

class UploadForm extends yiiaseModel
    {
        /**
         * @var UploadedFile file attribute
         */
        public $file;
 
 
        /**
         * @return array the validation rules.
         */
        public function rules()
        {
            return [
                [['file'], 'file'],
            ];
        }
 
        public function upload()
        {
            if ($this->validate()) {
                $filePath = 'uploads/' . $this->file->baseName . '.' . $this->file->extension;
                $this->file->saveAs($filePath);
                return true;
            } else {
                return false;
            }
        }
    }

在UploadForm中,設定了一個public屬性file,用於儲存上傳的檔案。同時,設定了一個rules方法,用於對文件進行驗證,通過驗證後進行文件上傳。檔案上傳的路徑為'uploads/' . $this->file->baseName . '.' . $this->file->extension。

3.實作檔案下載

檔案下載功能實作比較簡單,在控制器中直接回到檔案流即可。

public function actionDownload($file)
    {
        Yii::$app->response->sendFile($file);
    }

在actionDownload中,使用Yii::$app->response->sendFile()方法傳回檔案流。其中$file為文件路徑。

二、總結

本文介紹如何在Yii框架中實現文件上傳和下載的功能,主要涉及文件上傳與下載的相關配置、操作及相關模型的設計。透過本文的學習,讓我們對Yii框架中的文件操作有更深入的了解與熟悉,更方便快速地實現相關功能。

以上是Yii框架中的檔案上傳與下載:實作檔案相關操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn