Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF]jak zapisac plik pod inna nazwa
Forum PHP.pl > Forum > PHP > Frameworki
wiewiorek
W Symfony żeby zapisać plik pod inną nazwą wystarczyło:
  1. $plik = $this->form->getValue('plik');
  2. $plik->save(sfConfig::get('sf_upload_dir'). DIRECTORY_SEPARATOR .'obrazki'. DIRECTORY_SEPARATOR .'inna_nazwa.jpg');


Jak to zrobic w ZF - robie tak:
  1. $upload = new Zend_File_Transfer_Adapter_Http();
  2. $upload->setDestination(APPLICATION_PATH.'/../public/uploads/obrazki');
  3. if (!$upload->receive())
  4. {
  5. echo "Błąd odbierania pliku.";
  6. }


Ale to mi zapisuje pod oryginalna nazwa. Znalazlem cos o rename - przemianowywaniu pliku, ale to mi nic nie da. Bo ja potem bede chcial zapisac ten sam plik i jak ja go zapisze potem drugi raz ?
zend
Niestety jedynym wyjściem w Twoim przypadku jest przeniesienie tego za pomocą funkcji php. Jeśli korzystasz z Zend_Form wepchnij tą logikę do klasy, wkońcu to przecież model smile.gif
Master Pain
Nieprawda, nie jedynym.
Zend_Filter_File_Rename smile.gif
wiewiorek
To moge zrobic tak:
  1. $filterFileRename = new Zend_Filter_File_Rename(array('target' => $sciezka_uploadu.$nowa_nazwa, 'overwrite' => true));
  2. $filterFileRename->filter($sciezka_uploadu.$stara_nazwa);


I w ten sposób mam przemianowany plik. A jak w takim razie mogę go zapisać drugi raz z dopiskiem na początku 'mini_'. Bo dla kazdego zaladowanego pliki chce miec dwa zapisane pliki, jeden z normalna nazwa, a drugi z dopiskiem 'mini_' ? Bo chce potem zrobic miniature - wiec musze miec jeden obrazek w normalnych rozmiarach, a drugi mniejszy - czyli dwa pliki.
Master Pain
Pytasz zatem o coś zupełnie innego smile.gif

1) odbierasz obrazek (obojętnie jaka nazwa)
2) zapisujesz w katalogu, np.: 'images/big' (jako duże, oryginalne wielkości zdjęć)
3) korzystając z dobrodziejstw PHP i GD2 lub np klasy: phpThumb robisz miniatury i zapisujesz do docelowego katalogu, np .: 'images/small'

I to tyle. Tu nie chodziło o ten problem co opisałeś winksmiley.jpg Zawsze podaj dokładnie co chcesz zrobić.
wiewiorek
ok - a jeszcze jedno pytanie: obecnie odbieram obrazek, zapisuje go pod oryginalna nazwa, zmieniam mu nazwe na unikalna - wygenerowana przeze mnie. Czy istnieje mozliwosc od razu zapisu obrazka pod wygenerowana przeze mnie unikalna nazwa z pominieciem zapisu obrazka pod oryginalna nazwa ?
Master Pain
Tak, Zend_Filter_File_Rename, o którym już wspomniałem, bo rozumiem, że o Zenda nadal się rozchodzi.
wiewiorek
W jaki sposób mogę to zrobić, bo mam kod:
  1. $form = new Admin_Form_UploadObrazka();
  2. $this->view->form = $form;
  3.  
  4. if ($this->getRequest()->isPost())
  5. {
  6. $formData = $this->getRequest()->getPost();
  7. if ($form->isValid($formData))
  8. {
  9. $upload = new Zend_File_Transfer_Adapter_Http();
  10. $sciezka_uploadu = APPLICATION_PATH.'/../public/uploads/obrazki/';
  11. $upload->setDestination($sciezka_uploadu);
  12. if (!$upload->receive())
  13. {
  14. echo "Błąd odbierania pliku.";
  15. }
  16.  
  17.  
  18. $old_name = $upload->getFileName('plik', false);
  19. $mime_type = $upload->getMimeType('plik');
  20. $extension = $this->zwrocRozszerzeniePliku($old_name);
  21. $new_name = md5(uniqid(mt_rand(), true)).".".$extension;
  22.  
  23. $filterFileRename = new Zend_Filter_File_Rename(array('target' => $sciezka_uploadu.$new_name, 'overwrite' => true));
  24. $filterFileRename->filter($sciezka_uploadu.$old_name);


A na stronach, które przegladałem to wszędzie taki obrazek jak najpierw zapisywany pod oryginalną nazwą a dopiero potem przemianowywany:
http://ahsangill.wordpress.com/2009/02/17/...m_element_file/
http://www.thomasweidner.com/flatpress/2008/09/
http://stackoverflow.com/questions/380921/...naming-question
Master Pain
No to wrzuć go najpierw do jakiegoś temp'a, a potem przenieś do miejsca docelowego (przeniesienie ze zmianą nazwy). Już łatwiej nie idzie tego wytłumaczyć smile.gif
wiewiorek
To mam dać: ->setDestination('c:\windows\temp') - to dziekuje, wole nie, zwlaszcza jak mialbym potem aplikacje przeniesc na serwer winksmiley.jpg Zostanę więc przy pierwotnym sposobie - najpierw zapis, potem zmiana nazwy, choć w Symfony zostało to rozwiązane zdecydowanie lepiej.
nospor
faktycznie lipa.... nie idzie ustawić jakiegoś prefiltra która najpierw ustali nową nazwę i dopiero potem zapisze w katalogu docelowym pod tą nazwą?
Im bardziej zagłębiam się w tego zenda tym bardziej widzę jakie to ustrojstwo niedopracowane :/
Pilsener
1. Ścieżkę i nazwę pliku inną niż standardowa możesz zdefiniować w formularzu:
  1. ->addFilter('Rename', array('target'=>'justuploaded','overwrite'=>true));


2. Potem ten plik odbierasz i robisz z nim co chcesz:
  1. $picture = new Imagick($file);
- robisz miniatury i zapisujesz gdzie chcesz pod dowolną nazwą

3. Jeśli chcesz mieć od razu plik pod docelową nazwą to musisz wygenerować tą nazwę w formularzu lub przekazać do formularza jako parametr, ale moim zdaniem to żadna różnica, bo i tak plik trafia najpierw do "śmietnika" (bezpieczny folder) a dopiero po sprawdzeniu jest kopiowany i zapisywany do public.

4. Akurat problem z uploadem plików dotyczy tu czego innego - tmp_name jest taki sam jak oryginalna (lub ustawiona przez nas) nazwa pliku, mam nadzieję, że już to poprawili.

PS -> To tylko framework, jak czegoś nie ma albo nam nie odpowiada to piszemy sami, to tylko zestaw narzędzi, powiedzmy znalezionych u wujka w garażu, nie wszystkie są dobre i nowoczesne smile.gif
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.