Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Cake] Upload files / tmp
Forum PHP.pl > Forum > PHP > Frameworki
Randallmaster
Witam,

Potrzebuje zrobić multiple upload plików, ale niestety nie wiem jak zabrać się za to w cakephp czy mógłby ktoś pomoc podpowiedzieć gdzie mogę o tym poczytać ?
Pyton_000
A w czym problem?
Wrzucasz form do widoku, robisz akcje form na jakiś kontroler i tam standardowo obsługa uploadu (przykładny w manualu php)
czychacz
A jakiego rodzaju "multiple upload plików" chcesz zrobić? Jakiś prosty? Jakiś bardziej rozbudowany? Jakiś z dynamicznym dodawaniem pól typu file?
http://book.cakephp.org/2.0/en/core-librar...lpers/form.html
Pierwszy to wstawienie ::file - tutaj problemów nie powinieneś mieć.
Drugi zależy od tego, co chcesz osiągnąć.
Trzeci może sprawiać problem, jeśli używasz Security.
Randallmaster
Powiedzmy że już coś udało mi się zrobić:
Korzystam z tego:

http://blueimp.github.io/jQuery-File-Upload/

Bez cakephp biblioteka działa super tworzy tymczasowe pliki i można je łatwo odczytać.

Tylko teraz pytanie jak to przenieść do cakephp.

gdzie w cakephp zrobić przechowywanie plików dodatkowo poniższy skrypt odwołuje się do strony: '../server/php/,
Czyli stworzyć nowy controller i widok który to obsłuży ?

Gdzie w cakephp powinno się przechowywać pliki?
/webroot/files?

  1. // Initialize the jQuery File Upload widget:
  2. $('#fileupload').fileupload({
  3. // Uncomment the following to send cross-domain cookies:
  4. //xhrFields: {withCredentials: true},
  5. url: '../server/php/'
  6. });
  7.  
  8. // Enable iframe cross-domain access via redirect option:
  9. $('#fileupload').fileupload(
  10. 'option',
  11. 'redirect',
  12. window.location.href.replace(
  13. /\/[^\/]*$/,
  14. '/cors/result.html?%s'
  15. )
  16. );
czychacz
Kod
$('#fileupload').fileupload({
        url: 'url_strony'
    });

z tego, co widzę, potrzebne Ci jedynie to, ale możesz dodać jakieś bajery, które są opisane w źródle dema.

Co do umieszczenia tego w kodzie cake - nie wiem, jaką masz strukturę swojej aplikacji, ale: tak, musisz obsłużyć to jakąś akcją w kontrolerze. Widok niekoniecznie będzie potrzebny, bo pliki idą ajax-em, więc będzie on tylko sprawiał problemy. Wyłączyć go możesz (o ile dobrze pamiętam)
Kod
$this->render(false);
albo
Kod
$this->render(null);
Ewentualnie poszukaj gdzieś na stack overflow - ja nie bardzo mam możliwość.

Do akcji dodajesz wywołanie takie, jak w https://github.com/blueimp/jQuery-File-Uplo...r/php/index.php
Kod
$upload_handler = new UploadHandler([tutaj opcje takie jak 'upload_dir']);

oczywiście po uprzednim załadowaniu tej klasy.
Nie jestem pewien, czy cake obsłuży takie żądanie bez problemów, ale jeśli programista, który utworzył tę bibliotekę, wiedział, co robi, to nie powinno być problemu.

Gotowcem całego kodu nie sypnę z wielu powodów. Głównym jest to, że już po pierwszym spojrzeniu widzę, że jakość tego rozwiązania pozostawia wiele do życzenia - może nie po stronie kodu, ale obsługi i dokumentacji.
Randallmaster
postaram się to zrobić a czy posiadasz dla cakephp jakieś rozwiązanie uploadów? Aby to działało tak jak w tym przykładzie?


Mógłbyś mi jeszcze odpowiedzieć na te pytania:
Gdzie w cakephp przechowywać pliki?
oraz czy pliki tymczasowe powinno zapisywać się do tmp?

Dziękuje czychacz smile.gif

Mogę powiedzieć że plugin działa smile.gif wystarczyło zrobić prawie to co napisałeś poza parą zmian w plikach smile.gif

Gdyby ktoś miał problemy proszę pisać smile.gif
czychacz
Cytat(Randallmaster @ 12.08.2014, 13:35:31 ) *
Gdzie w cakephp przechowywać pliki?

Filozofia nie różni się od przechowywania w przypadku innych frameworków. Pliki, które nie powinny być bezpośrednio udostępniane na zewnątrz, trzeba przechowywać w katalogu, do którego użytkownik zewnętrzny nie będzie miał dostępu (jakiś katalog typu 'jakaś_ścieżka/files' lub nawet podkatalog aplikacji cake - jednak w tym drugim przypadku trzeba uważać, żeby się bałagan nie zrobił).
Cytat(Randallmaster @ 12.08.2014, 13:35:31 ) *
oraz czy pliki tymczasowe powinno zapisywać się do tmp?

Na to pytanie odpowiedź jest oczywista - tak. Problemem jest tylko to, czy katalog będzie czyszczony w odpowiedni sposób (oczywiście preferowane jest użycie tmp php-owskiego - sprawia najmniej kłopotów).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.