Problém se stažením souboru typu doc

před 16 dny

n.u.r.v.
Člen | 453
+
0
-

Ahoj, v nette mám řešeno stahováni souboru takto:

$this->sendResponse(new Responses\FileResponse($cestaksouboru, $nazevsouboru));
$this->terminate();

A funguje to až na soubory doc. (ne docx). Při stažení se něco stane a soubor je nepoužitelný (ms word má hlásí chybu kódování a libre office to otvírají 5 minut a hlásí 50000 stran).

Dělá to jen na hostingu, na localu to funguje správně.

Zatím mám řešení, že u typu doc dělám stahování takto (kod nalezen na webu):

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: application/msword");
header("Content-Disposition: attachment; filename=\"" . $filename . "." . $type . "\";");
header("Content-Transfer-Encoding: binary");
ob_clean();
flush();
readfile($cestaksouboru);
$this->terminate();

Funguje to, ale já bych to chtěl mít sjednoceno přes sendResponse/fileresponse

Díky za radu

Editoval n.u.r.v. (8. 8. 15:49)

před 16 dny

David Matějka
Moderator | 5936
+
0
-

Ahoj,
a co ti brani z toho udelat vlastni response?

před 16 dny

Felix
Nette Core | 938
+
0
-

n.u.r.v. napsal(a):

Funguje to, ale já bych to chtěl mít sjednoceno přes sendResponse/fileresponse

Díky za radu

Zkus mrknout na pripravene Nette\Application\Response z contributte/application balicku.

https://contributte.org/…ication.html#…

před 15 dny

n.u.r.v.
Člen | 453
+
0
-

Díky, ale nevím co z toho vyčíst, jde mi o to, proč to jen u typu doc dělá problémy když jiné typy souboru jdou bez toho abych něco já ručně nastavoval. A i když nastavím content-type v FileResponse na application/msword, tak to nejde.
A také je divné, že na localu (win) to nedělá problém, ale na hostingu (linux) ano.

Zatím jsem teda nastavil přes HttpResponse hlavičky ručně a soubor načítám přes readfile a funguje to…

před 15 dny

Gappa
Člen | 80
+
0
-

n.u.r.v. napsal(a):
A funguje to až na soubory doc. (ne docx). Při stažení se něco stane a soubor je nepoužitelný (ms word má hlásí chybu kódování a libre office to otvírají 5 minut a hlásí 50000 stran).

Ten soubor je jiný jak? Velikostí? A/nebo obsahem?

Ještě jsem koukal na správné mime type, ale tím by to asi být nemělo, ale pro jistotu je jejich seznam tady:

před 12 dny

n.u.r.v.
Člen | 453
+
0
-

Ahoj, je jiný tak, že word při spuštění zobrazí rozsypaný čaj a nabídku kodování. Libre office to zase otvírají x minut a z jednostránkového dokumentu vznikne dokument o 50000 stránkách s rozsypaným čajem. Velikost odpovídá.

Edit: Bude to něco s nastavením serveru, něco asi změnili na hostingu, protože kdysi stahování doc fungovalo a nyní ne. Akorát netuším co na to může mít vliv…

A k tomu jsem zjistil, že to dělají i docx (s tím rozdílem, že docx dokáže word opravit). Tohle vše ale ještě nedávno fungovalo. PDF zatím fungují.

Editoval n.u.r.v. (12. 8. 13:01)

před 12 dny

ic
Člen | 425
+
0
-

A jestli správně rozumím požadavku, jde o to, aby se soubor stáhl a neprováděla se defaultní akce prohlížeče, což může být otevření v nějakém cloudovém office či desktopovém office, ale aby se to za všech okolností stáhlo?

Pak by se to dalo řešit běžným odkazem na soubor jen s atributem download. Dříve byl problematický kvůli špatné podpoře, ale dnes už je to pohoda… viz. https://caniuse.com/#…

před 12 dny

n.u.r.v.
Člen | 453
+
0
-

nene, on se soubor stáhne na disk, browser s tím nic nedělá. Taky je to jako nepovinný parametr FileResponse (forceDownload = true)

před 12 dny

Gappa
Člen | 80
+
0
-

n.u.r.v. napsal(a):

Ahoj, je jiný tak, že word při spuštění zobrazí rozsypaný čaj a nabídku kodování. Libre office to zase otvírají x minut a z jednostránkového dokumentu vznikne dokument o 50000 stránkách s rozsypaným čajem. Velikost odpovídá.

Edit: Bude to něco s nastavením serveru, něco asi změnili na hostingu, protože kdysi stahování doc fungovalo a nyní ne. Akorát netuším co na to může mít vliv…

A k tomu jsem zjistil, že to dělají i docx (s tím rozdílem, že docx dokáže word opravit). Tohle vše ale ještě nedávno fungovalo. PDF zatím fungují.

Nešlo by někam nahrát (testovací, ale text třeba kus z wiki, s češtinou) originál a poškozený soubor? Docela by mě zajímalo, co se s tím souborem vlastně stane.

před 9 dny

n.u.r.v.
Člen | 453
+
0
-

JJ, ke stažení zde

Je tam originál, poškozený a stažený přes ručně napsané hlavičky…

před 9 dny

Gappa
Člen | 80
+
0
-

Na začátku poškozeného souboru je v HEX 0A, což je LF, tedy odřádkování, zbytek souboru je o to posunutý.
Pokud se toto smaže, soubor funguje – i když je o byte kratší, ale ten konec je stejně doplněný do dané délky jen pomocí 00, což je NULL.

Takže se nějak podaří serveru přidat na začátek souboru to odřádkování, ale zachovat výslednou délku.

před 9 dny

David Grudl
Nette Core | 6864
+
+5
-

Dost možná je ten znak v nějakém skriptu. Zkus použít Tracy\OutputDebugger::enable() a najít ho.

před 8 dny

n.u.r.v.
Člen | 453
+
+3
-

@DavidGrudl Díky, škoda že tu není smajlík facepalm – mezera byla v bootstrap.php na začátku…