Donwload souboru s cookie
- Honza.Mottl
- Člen | 104
Ahoj,
downloaduji pdf soubor a potreboval bych soucasne zaslat cookie. Delam to ciste
v php a neco delam spatne, cookie se neposila. Rad bych zeptal:
- Da se nejak sikovne v nette provest dowload souboru (pdf) soucasne s cookie?
- Co tam delam spatne?
Diky za pomoc.
Proc to delam:
na serveru generuji pdf, coz muze chvilku trvat. Potrebuji, aby uzivatel na
prvni pohled videl ze to jeste bezi. Proto zobrazuji gif s load spinnerem.
Spinner je treba ukoncit jakmile dobehne download. Proto cekam v js timeru az
bude nastaveno cookie. Bohuzel se mi nedari poslat cookie soucasne se
souborem :(
protected function send_download($file) {
if (file_exists($file)) {
set_time_limit(0);
setcookie("fileDownloadToken", "fileDownloadToken", time()+360); // 10 minutes
header('Connection: Keep-Alive');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
}
}
- Honza.Mottl
- Člen | 104
Díky. Asi by se to tak řešit dalo. Handler by udělal download, cookie by nebylo potřeba.
Já jsem použil tip z tohoto linku: http://gruffcode.com/…the-browser/
- Honza.Mottl
- Člen | 104
Na problém s cookie už jsem přišel. Ono se cookie posílalo, ale bylo vidět jen přes response. Musel jsem nastavit path a domain, aby bylo přístupné pro funkce použité ve zdroji, ze kterého jsem čerpal. "":/…the-browser/
S touto opravou to jede:
setcookie("fileDownloadToken", $fileDownloadToken, time()+360, '/', $this->template->domain); // 10 minutes
- Honza.Mottl
- Člen | 104
Koukal jsem i na možnost downloadu přes Ajax. Musel bych ještě zjišťovat jméno vygenerovaného pdf, byl by tam potenciální jména souboru v adresáři Downloads atd. Nakonec jsem dal přednost řešení s cookie.
Přitom jsem našel hezky udélaný příklad downloadu přes Ajax http://plnkr.co/…J6f1j6jhgJ4q?…