Vygenerování zip souboru a stažení
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- bluray
- Člen | 178
Dobrý den, potřebuji vygenerovat zip soubor a nabídnout uživateli ke
stažení. Nejlépe abych ho nemusel nikam na serveru ukládat. Program mi
funguje, zip jde stáhnout ale potom to hlásí že je poškozen.
tady je kod:
class ZipDownloader implements IResponse{
/**
* Sends response to output.
* @return void
*/
public function send(Nette\Http\IRequest $httpRequest, Nette\Http\IResponse $httpResponse) {
$file = tempnam("tmp", "zip");
$zipName = 'pokus.zip';
$zip = new \ZipArchive();
if ($zip->open($zipName, \ZipArchive::CREATE)!== TRUE)
throw new InvalidOperationException('Nepodařilo se otevřít zip archiv.');
$zip->addFromString('soubor.txt', 'Nejaký text');
$zip->addEmptyDir('ahoj');
$zip->close();
$httpResponse->setHeader('Content-Description', 'File Transfer');
$httpResponse->setContentType('application/zip', 'UTF-8');
$httpResponse->setHeader('Content-Disposition', 'attachment; filename=' . $zipName);
$httpResponse->setHeader('Content-Transfer-Encoding', 'binary');
$httpResponse->setHeader('Expires', 0);
$httpResponse->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0');
$httpResponse->setHeader('Pragma', 'public');
$httpResponse->setHeader('Content-Length', strlen($zipName));
}
}
Děkuji za radu
- David Matějka
- Moderator | 6445
a nema nahodou ten stazeny soubor velikost 0? protoze nikde nevidim, ze bys uzivateli odeslal samotny ten soubor :)