eluhr/yii2-fileflyupload

为 yii2 模型提供文件上传功能

1.0.1 2022-02-24 17:00 UTC

This package is auto-updated.

Last update: 2024-08-24 22:31:47 UTC


README

这是一个辅助特性,用于轻松地将本地文件系统中的文件上传到另一个文件系统

安装

composer require eluhr/yii2-fileflyupload

使用

您的配置必须配置所需的文件系统,请参阅 creocoder/yii2-flysystem

在您的模型中使用该特性

 namespace example\namespace\models;

 use eluhr\fileflyupload\traits\FileflyUploadTrait;
 use yii\base\Model;
 use yii\helpers\FileHelper;

 class MyModel extends Model
 {
     use FileflyUploadTrait;

     public $file;
     
     public function getLocalFs(): string {
         return 'fsLocal';
     }
     
     public function getStorageFs(): string {
         return 'fsStorage';
     }

     public function rules(): array
     {
         $rules = parent::rules();
         $rules[] = [
             'file',
             'file',
             'skipOnEmpty' => false,
             'extensions' => 'pdf',
             'maxSize' => 3145728 // 3 MB
         ];
         return $rules;
     }

     public function upload(): bool
     {
         if ($this->validate()) {
             $relativePath = '/path/to/file.pdf';
             $absolutePath = \Yii::$app->get($this->getLocalFs())->path . $relativePath;
             if (!FileHelper::createDirectory(dirname($absolutePath))) {
                 return false;
             }
             if ($this->file->saveAs($absolutePath) && $this->moveLocalFileToStorage($relativePath)) {
                 return true;
             }
             $this->addError('file', \Yii::t('model','Error while uploading file'));
         }
         return false;
     }
     
           
     public function beforeDelete()
     {
         if (!$this->deleteFromStorage('/path/to/file.pdf')) {
             return false;
         }
         return parent::beforeDelete();
     }
 }

在您的控制器中,只需调用 moveLocalFileToStorage 方法

 namespace example\namespace\controllers;

 use my\namespace\models\MyModel;
 use yii\web\Controller;
 use yii\web\UploadedFile;
 use Yii;

 class MyController extends Controller
 {
     public function actionUpload()
     {
         $model = new MyModel();
         if (Yii::$app->getRequest()->getIsPost()) {
             $model->file = UploadedFile::getInstance($model, 'file');
             if ($model->upload()) {
                 return $this->redirect(['upload']);
             }
         }
         return $this->render('upload', ['model' => $model]);
     }
 }

您的视图文件可以如下所示

use yii\helpers\Html;
use yii\widgets\ActiveForm;

$form = ActiveForm::begin();
echo $form->field($model, 'file')->fileInput(['accept' => 'application/pdf']);
echo Html::submitButton();
ActiveForm::end();

注意:这是一个非常基本的示例。这可能不符合您的需求。请勿盲目复制粘贴