Stažení vygenerovaného XML s dialogem pro uložení
- Joacim
- Člen | 229
Zdravím, zkoumám jak mám vygenerovat nový xml soubor pro stažení (po
odeslání formuláře) a nabídnout jej uživateli ke stažení (dialogové
okno kde si uživatel vybere cestu a případně změní název souboru před
uložením).
V proměnné $r
mám xml string. Bohužel u FileResponse musí
soubor existovat.
Mám dva file inputy, přes které nahraji 2 xml soubory a pak je podle
určitých pravidel spojím a v $r
mám výstup, který jen
potřebuji nabídnout ke stažení(Objeví se dialogové okno k uložení
stahovaného souboru).
$httpResponse = $this->context->getByType('Nette\Http\Response');
$httpResponse->setHeader('Pragma', "public");
$httpResponse->setHeader('Expires', 0);
$httpResponse->setHeader('Cache-Control', "must-revalidate, post-check=0, pre-check=0");
$httpResponse->setHeader('Content-Transfer-Encoding', "binary");
$httpResponse->setHeader('Content-Description', "File Transfer");
// $httpResponse->setHeader('Content-Length', filesize($r));
$this->sendResponse(new Nette\Application\Responses\FileResponse($r, 'merge.xml', array('application/octet-stream', 'application/force-download', 'application/download')));
Edit
S touto NoNette variantou mi to funguje
// force download
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
// disposition / encoding on response body
header('Content-Disposition: attachment; filename=export.xml');
header("Content-Transfer-Encoding: binary");
header("Cache-control: private"); //use this to open files directly
header('Expires: 0');
header("Pragma: no-cache");
header("Connection: close");
echo $r;
$this->terminate();
Ale radši bych použil nějakou nette funkčnost, když už jej tedy používám :D
Editoval Joacim (22. 2. 2016 13:43)
- Jan Endel
- Člen | 1016
Úplně ti bude stačit použít TextResponse i když bych spíše doporučil vytvořit vlastní XMLResponse a tu od TextResponse podědit a dělat tam ty čachry s hlavičkama.
- Joacim
- Člen | 229
Jan Endel napsal(a):
Úplně ti bude stačit použít TextResponse i když bych spíše doporučil vytvořit vlastní XMLResponse a tu od TextResponse podědit a dělat tam ty čachry s hlavičkama.
Taky jsem si původně myslel, že jej využiji, ale nevěděl jsem jak na to, zítra to vyzkouším, díky za nakopnutí
Problém je, že nevím jak vynutit aby se vždy ukázalo dialogové okno před stánutím, v chromu se mi soubor sám stáhne po kliknutí, ale FF vyzve k uložením do cesty co vyberu a mužu i přejmenovat
Editoval Joacim (22. 2. 2016 17:55)
- Joacim
- Člen | 229
CZechBoY napsal(a):
V chromu to bude asi jen nastavení prohlížeče :-)
To jsem si myslel taky, ale mám i jiné programy které nejsou v nette napsané, ale používají stejnou logiku, přičemž v nette dialog není, ale v ostatních aplikacích je a vždy mám v hlavičce nastaveno attachment