Gestione file upload con zend

Salve, ho una ennesima domanda da sottoporvi, mi trovo dinnanzi al problema di dover fare l'upload di alcuni file nella mia applicazione, vorrei chiedervi se esiste un modulo zend che facilita le cose o devo gestire l'upload con le funzioni php classiche???

Grz a tutti per ogni intervento, ciao :)

inviato 8 anni fa
reve
reve
1
X 0 X

Non credo che attualmente lo ZF gestisca il processo di upload ma se non sbaglio  trashofmasters stava lavorando su un componente per l'upload. Prova a contattarlo.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni, e grazie per la risposta, come posso contattare Trashformasters

risposto 8 anni fa
reve
reve
1
modificato 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Ciao a tutti, per gli interessati all'argomento dell'allegare i file con zend, vi posto una soluzione che ho trovato e sembra funzionare correttamente.

1- Nel file della vista ho usato i classici tag per inserire file:

<?php echo $this->formFile('documento',null,$attrib); ?>

2- Nel controller ho inserito il riferimento alla funzione dove ci sono le istruzioni per allegare file:

$allegato = new Allegato;

$allegato->copyFile();

3- Nel modello ho creato la classe Allegato e la funzione copyFile e sfruttando le funzioni php ho creato il metodo per allegare i file:

   public function copyFile(){

      $uploadfile_dir = 'C:/web/zendProject/asmFlotte/upload/';

      $uploadfile   = $uploadfile_dir.basename($_FILES['documento']['name']);

      move_uploaded_file($_FILES['documento']['tmp_name'], $uploadfile);

   }

Questa soluzione prevede il semplice uso di funzioni php ma girovagando nei vari forum e tra la documentazione ufficiale leggevo che si possono allegare file utilizzando la funzione setFileUpload di Zend_Http_Client, se qualcuno ha implementato qualcosa del genere e decide di condividere il suo codice può postarlo qui.

 :bye:

risposto 8 anni fa
reve
reve
1
X 0 X

Se non sbaglio con Zend_Http_Client si riesce ad inviare (e non a ricevere) un file ad un altro server web.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Di moduli upload con lo zend ancora non se ne vedono, anche se un proposal c'è.

Il problema è che si stanno ancora scannando per il nome da dare al componente, se non si risolvono dubito che riusciranno a fare qualcosa.

Ma fa niente, comunque io avevo creato un modulo per l'upload di file (singoli o multipli) in modo facile e veloce, l'unico problema è che, non avendo ancora fatto il proposal, manca di documentazione e di unit test.

Il componente è stato originariamente pensato per uno scopo ben preciso, anche se è abbastanza generale, comunque non ti assicuro che non dovrai toccare il codice delle classi.

Il modulo è scaricabile da qui :

http://rapidshare.com/files/88071878/Upload.rar.html

per la configurazione dovresti agire sul file File/Factory.php per aggiungere i tuoi tipi di file, visto che erano contemplate solo immagini.

un esempio di utilizzo è questo:

<?php
/**
    * Zend_Upload esempio.
    * @param string $file Nome del campo file nel template.
    * @param Zend_Upload_Adapter_Interface $adapter Specifica il supporto sul quale effettuare l'upload.
    * @param Zend_Upload_Handler_Interface $handler Manipola i file prima o dopo aver effettuato l'upload.
    * @param Array $allowed Tipi di file supportati dall'uploader, se null qualsiasi tipo di file è ammesso.
    *
    * Upload di un file singolo:
    * <code>
    *  <label>
    *      <input type="file" name="myUpload_Test_Field" />
    *      Carica un file
    *  </label>
    * </code>
    *
    */
    
   /**
    * Configurazione adattatore per salvataggio su database, ESEMPIO : NON IMPLEMENTATO
    */
   $rows = Array('name', 'data', 'type', 'createdon');

   $adapter = new Zend_Upload_Adapter_DbTable();
   $adapter->setTable('uploads')
         ->setRows($rows);
   
   /*
    * I formati possono essere espressi sotto forma di:
    * mime : image/png, text/plain
    */
   $allowed = Array('image/png', 'image/jpeg');
   
   //adattatore, permette di salvare i file su un determinato file supporto (sia esso un file system o un database), solo filesystem e' stato implementato.   
   $adapter = new Zend_Upload_Adapter_Filesystem($dir);
   
   //avvio l'uploader
   //TODO: rendere Zend_Upload singleton.
   $uploader = new Zend_Upload('myUpload_Test_Field', $adapter, null, $allowed);
   
   //Annulla tutti gli upload se qualcosa va storto, se alcuni file erano stati caricati prima dell'errore verranno rimossi
   $uploader->setParam('rollbackIfIncomplete', true);
   
   //se ci sono file e il form e' stato inviato
   if ($uploader->filesReady() && $uploader->isSubmit()) {
      //prova a uppare tutto
      //TODO: far sollevare eccezioni a commit()
      $result = $uploader->commit();
      //dopo tutti gli upload, controllo lo stato
      switch ($result) {
         //upload incompleto
         case Zend_Upload_Result::FAILURE_INCOMPLETE:
            echo 'Alcuni file non sono stati caricati correttamente';
            //TODO: Incapsulare rollbackIfIncomplete!!!
            if ($uploader->rollbackIfIncomplete()) {
               $uploader->rollback();
            }
            break;
         
         //upload fallito
         case Zend_Upload_Result::FAILURE:
            $uploader->rollback();
            echo 'tutti gli upload falliti';
            break;
         
         //upload ok!
         case Zend_Upload_Result::SUCCESS:
            echo 'tutti gli upload completi';
            break;
      }
      
      //la console contiene tutti i messaggi dell'uploader, puoi usarla per vedere passo passo l'upload di ogni singolo file
      zend_debug::dump($result->getMessages());
      foreach(Zend_Upload_Console::getInstance()->getMessages() as $message) {
         echo $message;
      }
   }

Ripeto che non è ufficiale, ma era solo una bozza che sarebbe dovuta diventare un proposal, poi dato il poco tempo...

Come aggiunta potresti già incapsulare tutto il controllo fatto nell'if nel commit e poi sollevare eccezioni in caso d'errore( ma questo dovrei farlo io :D ) al fine di ottenere qualcosa del genere

try {
    $uploader->commit();
    //se succede qualcosa e rollbackIfIncomplete è vero, rollback viene chiamato da commit.
} catch (Zend_Upload_Exception $ze) {
    $ze->getMessage();
}

ora scappo.

 :bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Ciao a tutti!

Mi riccollego a questo topic visto che è l'argomento della mia attuale difficoltà....  :-\

Allora, sto sviluppando un'applicazioncina basata sullo zend e dovrei permettere all'utente di uploadare delle immagini che poi andranno ad associarsi ai dei prodotti.

Ora, ho provato innanzitutto a fare quello che Reve suggeriva nel suo post-soluzione, ovvero utilizzando le semplici funzioni messe a disposizione dal php.

Purtroppo non mi funge nulla, nel senso che la funzione move_uploaded_file restituisce false, quindi non riesce ad effettuare l'upload. Non credo sia questione di permessi perchè ho provato a far girare questa funzione delle immagini al di fuori del contesto zend (chiamiamolo così) e questa funziona correttamente.

Sto sviluppando questa applicazione solamente in locale.

Boh, io non so più che fare perchè sonon 2 giorni che tento in tutti i modi possibili, che faccio test di ogni genere, che mi scervello...  :wallbash:

Avete qualche idea? Magari, lo spero.... !

Grazie comunque  :)

risposto 8 anni fa
gibson
X 0 X

vedi se questa soluzione fa al caso tuo:

http://akrabat.com/2008/04/07/simple-zend_form-file-upload-example/

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda

Domande simili