Простая загрузка файла
Загрузка одного файла
Класс UploadFileForm
class UploadFileForm extends Model { /** * @var UploadedFile */ public $file; public function rules() { return [ ['file', 'image', 'extensions' => ['jpg', 'jpeg', 'png', 'gif'], 'checkExtensionByMimeType' => true, 'maxSize' => 512000, // 500 килобайт = 500 * 1024 байта = 512 000 байт 'tooBig' => 'Limit is 500KB' ], ]; } public function upload() { if ($this->validate()) { $dir = 'uploads/'; // Директория - должна быть создана $name = $this->randomFileName($this->file->extension); $file = $dir . $name; $this->file->saveAs($file); // Сохраняем файл return true; } else { return false; } } private function randomFileName($extension = false) { $extension = $extension ? '.' . $extension : ''; do { $name = md5(microtime() . rand(0, 1000)); $file = $name . $extension; } while (file_exists($file)); return $file; } }
Представление:
<?php /* @var $this yii\web\View */ /* @var $model \frontend\forms\UploadFileForm */ use yii\widgets\ActiveForm; ?> <?php $form = ActiveForm::begin(['options' => []]) ?> <?= $form->field($model, 'file')->fileInput() ?> <button>Submit</button> <?php ActiveForm::end() ?>
Контроллер:
public function actionOneFile() { $model = new UploadFileForm(); if (Yii::$app->request->isPost) { $model->file = UploadedFile::getInstance($model, 'file'); if ($model->upload()) { Yii::$app->session->setFlash('success', 'Изображение загружено'); return $this->refresh(); } } return $this->render('index', ['model' => $model]); }
Можно получить файл не из модели. Например, получить файл при отправке запроса по API:
$file = UploadedFile::getInstanceByName('file');
Загрузка нескольких файлов
Класс UploadFilesForm
class UploadFilesForm extends Model { /** * @var UploadedFile[] */ public $files; public function rules() { return [ ['files', 'image', 'extensions' => ['jpg', 'jpeg', 'png', 'gif'], 'checkExtensionByMimeType' => true, 'maxSize' => 512000, // 500 килобайт = 500 * 1024 байта = 512 000 байт 'tooBig' => 'Limit is 500KB', 'maxFiles' => 5 ] ]; } public function upload() { if ($this->validate()) { foreach ($this->files as $file) { $file->saveAs('uploads/' . $this->randomFileName($file->extension)); } return true; } else { return false; } } private function randomFileName($extension = false) { $extension = $extension ? '.' . $extension : ''; do { $name = md5(microtime() . rand(0, 1000)); $file = $name . $extension; } while (file_exists($file)); return $file; } }
Представление:
<?php use yii\widgets\ActiveForm; /* @var $this yii\web\View */ /* @var $model \frontend\forms\UploadFileForm */ ?> <?php $form = ActiveForm::begin(['options' => []]) ?> <?= $form->field($model, 'files[]')->fileInput(['multiple' => true, 'accept' => 'image/*']) ?> <button>Submit</button> <?php ActiveForm::end() ?>
Контроллер:
public function actionMultiFile() { $model = new UploadFilesForm(); if (
Источник:
Перейти
Комментарии (0):
Чтобы оставить свой комментарий, необходимо пройти аутентификацию