Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF]Zend_Form_Element_File jak zmienić nazwę uplodowanego pliku
amii
post
Post #1





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


J/W potrzebuje zmienić nazwę pliku pobieranego przez usera i uploadowanego na serwer


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


No dobrze, ale:
- gdzie jest problem?
- co ma z tym wspólnego element formularza?

Przecież w każdym uploadzie:
- odbierasz plik, który ma tymczasową nazwę
- zapisujesz go pod nazwą jaką chcesz

Proszę o jakiś fragment kodu, bo nie jestem pewien czy dobrze rozumiem, przecież robisz tak:
  1. $file = $form->File->getFileInfo();


I masz to samo co w tablicy $_FILES
Go to the top of the page
+Quote Post
kalipek
post
Post #3





Grupa: Zarejestrowani
Postów: 43
Pomógł: 13
Dołączył: 3.02.2011

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


Dla pojedynczego pliku:

  1. $originalFilename = pathinfo($form->element->getFileName());
  2. $newName = rand(1,100) . time() . '.' .$originalFilename['extension'];
  3. $form->element->addFilter('Rename', $newName);
  4.  
  5. $values = $form->getValues();


Dla kilku:

  1. $upload = new Zend_File_Transfer_Adapter_Http();
  2. $upload->setDestination(realpath(APPLICATION_PATH .'/../public/path/to/files'));
  3. $files = $upload->getFileInfo();
  4.  
  5. $arrFileName = array();
  6. $countFileUpload = count($files);
  7. if($countFileUpload > 0 )
  8. {
  9. $i = 1;
  10.  
  11. foreach ($files as $file => $info){
  12. if($info['name'] != '')
  13. {
  14.  
  15. $file_name = $upload->getFileName($info['name']);
  16. preg_match("/\.([^\.]+)$/", $file_name, $matches);
  17.  
  18. $file_ext = $matches[1];
  19.  
  20. if($countFileUpload > 1)
  21. {
  22. $file_name = rand(1,100) . time() . '-' . $i . '.' .$file_ext;
  23. }
  24. else
  25. {
  26. $file_name = rand(1,100) . time() . '.' .$file_ext;
  27. }
  28. $arrFileName[$file] = $file_name;
  29.  
  30. $upload->addFilter('Rename', 'path/to/files' .'/' . $file_name);
  31. $i++;
  32.  
  33. $upload->receive($file);
  34. }
  35. }
  36. }
  37.  
  38. $values = $form->getValues();


getValues() zawsze dopiero po zmianie
Go to the top of the page
+Quote Post
amii
post
Post #4





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Może opiszę dokładnie co chcę osiągnąć:
1. Kiedy uploaduje się plik chce filtrować jego nazwę (usuwane polskie zanki, spacje i znaki specjalne)
2. Nazwa przefiltrowanego pliku jest zapisywana w bazie a plik jest zapisywany w katalogu public/uploads
3. Poprzedni plik skojarzony z tym rekordem jest usuwany

Dwa pierwsze punkty udalo mi się zrobić filtrem, natomiast jest problem z pkt. 3, poniżej fragment akcji:
Pracuję na localhost na Windows 7 kiedy wyświetlam:
$fld dostaję : C:\wamp\www\learning\public\uploads
$fld . '/' . $plik : C:\wamp\www\learning\public\uploads/audyt-dla-strony-http.doc
$fld . '\\' . $plik : C:\wamp\www\learning\public\uploads\audyt-dla-strony-http.doc
realpath($fld . '/' . $plik) : ''
realpath($fld . '\\' . $plik) : ''

  1.  
  2. //usuwanie poprzedniego pliku
  3. $fld = realpath(APPLICATION_PATH . '/../public/uploads');
  4. $plik = $DbTable->getFile($eid); //pobranie z bazt nazwy pliku
  5. $np = realpath($fld . '/' . $plik);
  6.  
  7. if (file_exists($np))
  8. {
  9. chmod($np, 0777);
  10. unlink($np);
  11. }



EDIT:
Problem jest gdzie indziej niż w ścieżce. Mam taki filtr:
Ten filtr działa ok pod tym względem, że nazwa pliku jest filtrowana i zapisywana w bazie prawidłowo. Dla przykładu dla pliku: badanie-konkurencji-szkolenia -Łódź.xls
w bazie jest zapisywany: badanie-konkurencji-szkolenia-d.xls, natomiast w katalogu uploads jest zapisywany: badanie-konkurencji-szkolenia -Łódź.xls
czyli plik skrzaczony i nie filtrowany

  1. class My_Filters_Uploader implements Zend_Filter_Interface
  2. {
  3. public function filter($value)
  4. {
  5. // perform some transformation upon $value to arrive on $valueFiltered
  6. $file = pathinfo($value);
  7. $valueFiltered = My_Slugs::string2slug($file['filename']);
  8.  
  9. return $valueFiltered . '.' . $file['extension'];
  10. }
  11. }


Ten post edytował amii 3.09.2012, 09:45:08


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
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 - 17:38