Download pomocí FileResponse
- duke
- Člen | 650
Narazil jsem právě na problém při implementaci downloadovacího skriptu, kdy během downloadu nemohl uživatel s webem nijak pracovat. Problém byl v tom, že aplikace používala session pro ověření uživatele a tuto session nezavřela před poskytnutím souboru (před voláním FileResponse::send). Ostatní requesty téhož uživatele tedy musely čekat na session, která po celou dobu downloadu nebyla k dispozici. Nemělo by Nette v tomto trochu pomoci, a nějak automaticky session zavírat před odesláním FileResponse?
Aktuálně tedy session zavírám ručně v presenteru:
public function renderDefault($file)
{
// ... vytvoření $response ...
$this->context->session->close();
$this->sendResponse($response);
$this->terminate();
}
Také jsem si při studování zdrojového kódu třídy FileResponse
všimnul, že ačkoli podporuje header Content-Range
, tak nakonec
stejně vrací celý zbytek souboru (místo žádaného intervalu), tj. seekuje
správně podle levé hranice tohoto intervalu, ale pravou hranici ignoruje. Jde
o opomenutí nebo je v tom nějaký záměr?
Editoval duke (1. 8. 2012 10:13)
- Ondřej Mirtes
- Člen | 1536
FileResponse s Content-Range jsem implementoval já. Není to záměr, můžeš poslat pull :)