eluhr / yii2-fileflyupload
为 yii2 模型提供文件上传功能
1.0.1
2022-02-24 17:00 UTC
Requires
- dmstr/yii2-filefly-module: ^1.4
- yiisoft/yii2: ^2.0
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();
注意:这是一个非常基本的示例。这可能不符合您的需求。请勿盲目复制粘贴