Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [CakePHP] problem z download'em plików pdf
misi3k
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 17.04.2011

Ostrzeżenie: (0%)
-----


Witajcie,
zwracam się do Was z problemem sfery technicznej, otóż korzystam z komponentu Thumbnail-component-for-CakePHP służącym do upload'u plików. Z wysyłaniem plików pdf na serwer nie ma problemu, natomiast po próbie ich ściągnięcia za pomocą przeglądarki pliki te są uszkodzone i niemożliwe do odczytania. Co dziwne, otwierając te pliki przez ftp nie ma takiego problemu.
Upload'owane pliki są zapisywane w folderze webroot/attachments/files, nadawana jest im nazwa za pomocą:
  1. String::uuid()
Do zasad routingu dodałem linijkę:
  1. Router::connect('/attachments/files/*', array('controller' => 'articles', 'action' => 'download'));
w kontrolerze posiadam akcję download:
  1. function download($url) {
  2. if(!empty($url)) {
  3. header('Content-type: application/pdf');
  4. header('Content-Disposition: attachment; filename='.$url);
  5. }
  6. }
gdzie $url podawany jest w widoku jako parametr.
Co o tym sądzicie? W czym tkwi problem? Proszę o pomoc.

Ten post edytował misi3k 4.05.2011, 19:00:22
Go to the top of the page
+Quote Post
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ty lepiej zerknij co się wysyła. Ja miałem taki problem sam z Kohaną smile.gif Zapomniałem się i oprócz samego pliku wysyłał się na początku kawałek widoku bazowego. Co jak co, ale zapomniałem o hierarchii wink.gif Kontroler główny miał swój widok, a po tym kontrolerze dziedziczyły inne, które bazowy widok "uzupełniały". Gdy doszło do wysyłania plików przez przeglądarkę, to oczywiście wysyłałem nie sam plik, ale plik opakowany w widok bazowy, z nagłówkiem tegoż pliku. Innymi słowy po dotarciu do przegląraki za żadne skarby nie miało prawa to być prawidłowym plikiem i podejrzewam, że sam w tę samą pułapkę w Cake'u wpadłeś.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
qrooel
post
Post #3





Grupa: Zarejestrowani
Postów: 306
Pomógł: 42
Dołączył: 25.03.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Może polskie znaki i spacje w nazwie pliku?


--------------------
Strony WWW: http://arscreo.pl
Go to the top of the page
+Quote Post
karolrynio
post
Post #4





Grupa: Zarejestrowani
Postów: 144
Pomógł: 25
Dołączył: 2.02.2009

Ostrzeżenie: (0%)
-----


A może poprostu wystarczy po wysłaniu nagłówków dać:
  1. readfile($url);
Go to the top of the page
+Quote Post
misi3k
post
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 17.04.2011

Ostrzeżenie: (0%)
-----


thek: Sprawdzałem w Firebugu, co się POSTuje, lecz trudno mi ocenić, czy coś jest nie tak. Jeśli potrzeba wrzucę takie info.
qrooel: Niestety nie w tym tkwi problem.
karolrynio: Sprawdzę po południu i dam znać.
Go to the top of the page
+Quote Post
thek
post
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Tu nie chodzi o to co sie postuje, ale co Ty dostajesz. Weź porównaj liczbę bajtów oryginalnego pliku oraz tego co Ci serwer wysyła. ja miałem gorzej, bo w nagłówkach kazałem wysyłać dokładnie taka ilość bajtów, ile ma plik na serwerze, czyli w pewnym momencie mi ścinał plik by pasował do tej liczby. Jeśli tak masz i Ty to usuń na chwilkę ten ogranicznik długości lub podejrzyj plik dowolnym edytorem tekstowym, czy aby nie masz na samym początku... kodu strony. Bo i taki numer może Ci framework wywinąć, jeśli zapomnisz o tym jak on działa.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
misi3k
post
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 17.04.2011

Ostrzeżenie: (0%)
-----


Problem rozwiązany! smile.gif podejrzałem ściągnięty plik pdf, który okazał się nim nie być, zawierał czysty kod layout'u (html) z błędami dotyczącymi brakiem widoku do akcji download. Okazało się, że podawałem złą ścieżkę do pliku (no comment...). Aktualnie moja akcja wygląda tak:
  1. function download($url) {
  2. if(!empty($url)) {
  3. header('Content-type: application/pdf');
  4. readfile(WWW_ROOT.'/attachments/files/'.$url);
  5. }
  6. }
i działa wyśmienicie. Dziękuję za pomoc. Pozdro
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 05:59