Mechanizm przeglądania w aplikacji plików graficznych i pdf
Controller/FilesController.php
use Laminas\Diactoros\Stream; .... class FilesController extends AppController { ... public function view($id=null) { $file = $this->Files->get($id); if($file) { $path = $file->dir . DS . $file->filename; $stream = new Stream($path, 'rb'); $response = $this->response; switch($file->ext) { case 'png': $response = $response->withType('png'); break; case 'jpg': $response = $response->withType('jpg'); break; case 'jpeg': $response = $response->withType('jpg'); break; default: $response = $response->withType('pdf'); } $response = $response->withHeader('Content-Disposition', 'inline'); $response = $response->withBody($stream); return $response; exit; } } // view }
Templates/Files/view.php
<div class="bg-white p-3 border rounded">
<div class="row">
<div class="bg-white col-md-6">
<p class="text-dark mb-2"><b>Załączniki</b> - kliknij aby uzyskać podgląd załącznika</p>
<?php foreach($files as $file): ?>
<span class="btn btn-light ml-2 mb-2 text-primary pointer file-link" data-file-id="<?= $file->id ?>">
<?= h($file->orygname) ?>
</span>
<?php endforeach; ?>
</div>
<div class="bg-white text-center col-md-6">
<p class="text-dark mb-2"><b>Podgląd</b>
<span class="ml-3 hidden pointer" title="Ukryj podgląd" data-toggle="tooltip" id="clear-viewer">
<i class="fa fa-times text-warning"></i>
</span>
</p>
<iframe src="" style="width: 100%; border: 1px solid lightgrey; height: 500px;" class="mx-auto hidden" id="file-viewer"></iframe>
</div>
</div>
</div>
<?= $this->Html->script('Files/preview-image', ['block' => true]) ?>
/js/Files/preview-image.js
$(".file-link").on('click', function(){
var file_id = $(this).data('file-id');
if(file_id) {
var pathname = '/files/view/'+ file_id;
$('#file-viewer').attr('src', pathname).removeClass("hidden");
$('#clear-viewer').removeClass("hidden");
}
});
// Ukryj widok
$('#clear-viewer').on('click', function(){
$('#file-viewer').attr('src', '').addClass("hidden");
$('#clear-viewer').addClass("hidden");
});