Nittro a download souboru ze serveru pomocí sendResponse
- klofi
- Backer | 2
Ahoj, řeším aplikaci, kde může uživatel stáhnout určitý dokument a tuto skutečnost potřebuju po ověření zda na to má oprávnění i zalogovat. V klasickém Nette 2.4 mi to jede bez problémů pomocí sendResponse se obsah souboru odešle prohlížeči a uživatel si ho uloží na disk, ale při pokusu implementovat Nittro to při kliknutí na n:href hází flash : There was an error processing your request. Please try again later. V tracy to ukáže, že se zavolal ajax /dokumenty/show-dokument?Id=xxx. V DevTools je vidět, že request vrátil binární obsah souboru.
Nedaří se mi nikde v dokumentaci ani na fóru najít informaci jak správně stažení souboru při použití Nittro implementovat. Asi by problém vyřešilo vynutit, aby n:href pro to stažení nebyl odeslán jako ajax požadavek, ale nedaří se mi to vynutit. Celý zbytek aplikace funguje po implementaci Nittro bez problémů.
Je při použití Nittro to stahování udělat nějak úplně jinak ?
Díky za jakýkoliv podnět nebo odkaz.
V layout.latte:
<script type=„application/javascript“
src=„{$basePath}/js/nittro.min.js“ async defer></script>
<link type=„text/css“ rel=„stylesheet“
href=„{$basePath}/css/nittro.min.css“ />
<div n:snippet=„content“>
{include content}
</div>
V default.latte:
{block content}
{foreach $dokumenty as $dokument}
<A n:href=„Dokumenty:ShowDokument
$Id“>{$dokument->filename}</A>
{/foreach}
{/block}
V presenteru:
public function actionShowDokument($Id)
{
$this->writeMyLog(„DokumentUpload“,$Id);
$dokument = $this->database->table(‚dokumenty‘)->get($Id);
$response = new Responses\FileResponse(__DIR__.‚/‘.$Id,
$dokument->filename);
$this->sendResponse($response);
}