upload_plikow
Alias do folderu
Dostęp do folderu pliki w katalogu głównym aplikacji W pliku common/config/main.php trzeba dopisać w sekcji aliases:
'aliases' => [ '@bower' => '@vendor/bower-asset', '@npm' => '@vendor/npm-asset', '@pliki'=>realpath(dirname(__FILE__).'/../../pliki') ],
W folderze pliki mam podfolder prace-dyplomowe ścieżka do tego podfolderu wygląda tak:
$path = Yii::getAlias('@pliki') . '/prace-dyplomowe/';
na moim lokalnym serwerze $path wyglada tak: /var/www/projekt100/pliki/prace-dyplomowe/
Model
<?php namespace app\models; use yii\base\Model; use yii\web\UploadedFile; /** * Model dla uploadu plików. */ class UploadFormPracaDypl extends Model { /** * @var UploadedFile file atrybut */ public $file; /** * Dposzczalne rozszerzenia POLON : * @return array reguły walidacji. */ public function rules() { return [ [['file'], 'file', 'extensions' => 'txt,rtf,pdf,xps,odt,ods,odp,doc,xls,ppt,docx,xlsx,pptx,csv', 'maxSize' => 20000 * 1024, 'tooBig' => 'Za duży plik! Max: 20MB'], ]; } public function attributeLabels() { return [ 'file' => 'Plik pracy (max 20MB)', ]; } public function upload($path, $name) { if ($this->validate()) { $path_file = $path . '/' . $name . '.' . $this->file->extension; $this->file->saveAs($path_file); return $name . '.' . $this->file->extension; } else { return false; } } }
Controller
use yii\web\UploadedFile; use app\models\UploadFormPracaDypl; ... public function actionUpPraca($id) { $model_upload = new UploadFormPracaDypl(); if (Yii::$app->request->isPost) { $model_upload->file = UploadedFile::getInstance($model_upload, 'file'); $path = Yii::getAlias('@pliki') . '/prace-dyplomowe/'; if (!is_dir($path)) { mkdir($path); } $name = 'nazwa pliku'; if ($plik = $model_upload->upload($path, $name)) { return $this->redirect(Url::previous('moje_studia')); } else { Yii::$app->session->setFlash('danger', "Praca nie została dodana !!!"); return $this->redirect(Url::previous('moje_studia')); } } return $this->renderAjax('up-praca', [ 'model_upload' => $model_upload ]); }
Formularz
<?php use kartik\form\ActiveForm; use yii\helpers\Html; use kartik\file\FileInput; ?> <?php yii\widgets\Pjax::begin(['id' => 'up_pr']) ?> <?php $form = ActiveForm::begin([ 'id' => 'up_praca', 'options' => ['enctype' => 'multipart/form-data', 'data-pjax' => true]]); ?> <?= $form->field($model_upload, 'file')->widget(FileInput::class, [ 'language' => 'pl', 'options' => [ 'multiple'=>false, 'id' => 'pdpl', ], 'pluginOptions' => [ 'showCaption' => false, 'showUpload' => false, ] ])->label(false); ?> <div class="form-group"> <?= Html::submitButton('Zapisz', ['class' => 'btn btn-success submit']) ?> </div> <?php ActiveForm::end(); ?> <?php yii\widgets\Pjax::end() ?>
Download plik
public function actionDownload($id) { ... $path = Yii::getAlias('@pliki') . '/zaswiadczenia/' . $model_plik->nazwa_pliku; if (file_exists($path)) { return Yii::$app->response->sendFile($path, $model_plik->nazwa_pliku, ['inline' => true]); } }
Plik z pola blob w tabeli BD
public function actionDokument($id) { ob_start(); $mod = Dokumenty::find() ->where(['id' => $id]) ->one(); if (!$mod) { throw new \yii\web\NotFoundHttpException('Dokument nie został znaleziony.'); } $nazwa = str_replace(' ', '_', trim($mod->tytul)); $response = Yii::$app->response; $response->format = \yii\web\Response::FORMAT_RAW; $response->headers->set('Content-Type', $mod->mime_type); $response->headers->set('Content-Disposition', 'inline; filename="' . str_replace(' ', '_', trim($mod->tytul)) . '.' . $mod->rozszerzenie . '"'); $response->headers->set('Content-Length', strlen($mod->plik)); $response->content = $mod->plik; // Opcjonalnie: zakończenie i wyczyszczenie bufora wyjścia ob_end_clean(); return $response; }
upload_plikow.txt · ostatnio zmienione: 2024/11/12 18:19 przez zbych