Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    119

    Laravel 8 download multiplo file XML

    Ciao a tutti,

    Sto sviluppando un applicazione Laravel 8 con Livewire per il frontend.

    Nell'app ho bisogno di generare dei file xml passandovi dei dati presi dal database e eseguirne il download.
    Finora ho realizzato la struttura del file xml secondo le specifiche e riesco ad eseguirne il download, ma quando poi ciclo sui dati presi dal database ottengo un solo download.

    Avete consigli o suggerimenti?

    Codice PHP:
     public function exportXml(){
        
          
    $racc Raccomandata::select('*')->where('isGenerated','=',0)->get->toArray();

          foreach(
    $racc as $r){
               
               
    $xw xmlwriter_open_memory();
              
                   
    // codice per generale il file xml
                
               
    $xml xmlwriter_output_memory($xw);

                
    $response Response::create($xml200);
                
    $response->header('Content-Type''text/xml');
                
    $response->header('Cache-Control''public');
                
    $response->header('Content-Description''File Transfer');
                
    $response->header('Content-Disposition''attachment; filename="xml_file.xml"');
                
    $response->header('Content-Transfer-Encoding''binary');
                return 
    $response;
            
         }


  2. #2
    In una singola richiesta HTTP non puoi restituire dati di più file diversi (HTTP 101).Crea lato server uno ZIP con tutti i file e resittuisci quello.Oppure crea una pagina che elenca vari link ad ogni XML e lascia che sia l'utente a scaricarli.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    119
    Quote Originariamente inviata da filippo.toso Visualizza il messaggio
    In una singola richiesta HTTP non puoi restituire dati di più file diversi (HTTP 101).Crea lato server uno ZIP con tutti i file e resittuisci quello.Oppure crea una pagina che elenca vari link ad ogni XML e lascia che sia l'utente a scaricarli.
    Grazie mille Filippo!!

    Ho letto alcuni articoli su come si generano file zip, ma quando provo a generare ottengo l'errore :
    Codice PHP:
      Error : Class 'App\Http\Controllers\ZipArchive' not found 
    Ho modificato il mio codice in questo modo:

    Codice PHP:

    public function exportXml(){
        
          
    $racc Raccomandata::select('*')->where('isGenerated','=',0)->get->toArray();

            
    //creo un file .ZIP in cui inserisco gli xml relativi alle raccomandate        $zip = new \ZipArchive;foreach($racc as $r){
               
               
    $xw xmlwriter_open_memory();
              
                   
    // codice per generale il file xml
                
               
    $xml xmlwriter_output_memory($xw);

                
    $response Response::create($xml200);
                
    $response->header('Content-Type''text/xml');
                
    $response->header('Cache-Control''public');
                
    $response->header('Content-Description''File Transfer');
                
    $response->header('Content-Disposition''attachment; filename="xml_file.xml"');
                
    $response->header('Content-Transfer-Encoding''binary');

                 if(
    $zip->open('my_zip_test.zip'ZipArchive::CREATE) === TRUE){

                    
    //aggiungo i file xml allo zip                
                     
    $zip->addFile($response);
                    
    //chiudo il file zip                
                   
    $zip->close();           
                }         
            
         }

    Da cosa potrebbe derivare questo errore? Ho letto che su Linux va installato, ma io sono su Windows e dovrebbe già essere presente.
    Inoltre ho installato anche il pacchetto Maatwebsite Excel

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    782
    Dal fatto che la classe ZipArchive non è all'interno del tuo namespace ma all'interno del namespace globale di php.

    Quindi per usarla dovrai scrivere:

    $zip = new \ZipArchive();

    Con la \ prima del nome della classe. In questo modo l'autoloader sa dove andare a cercarla.
    Inoltre tu usi la variabile $zip che non è mai stata dichiarata, quindi dovrai anche inserire la riga che ti ho messo sopra prima di :

    if($zip->open('my_zip_test.zip', ZipArchive::CREATE) === TRUE)

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    119
    Quote Originariamente inviata da M4V1 Visualizza il messaggio
    Dal fatto che la classe ZipArchive non è all'interno del tuo namespace ma all'interno del namespace globale di php.

    Quindi per usarla dovrai scrivere:

    $zip = new \ZipArchive();

    Con la \ prima del nome della classe. In questo modo l'autoloader sa dove andare a cercarla.
    Inoltre tu usi la variabile $zip che non è mai stata dichiarata, quindi dovrai anche inserire la riga che ti ho messo sopra prima di :

    if($zip->open('my_zip_test.zip', ZipArchive::CREATE) === TRUE)
    Grazie mille M4V1,

    Ho fatto le modifiche che mi hai detto, e ho modificato anche la response per il download, però quando clicco dalla view sul button per eseguire il download ottengo il seguente errore
    codice:
    La pagina web all'indirizzo http://localhost:8000/raccomandate/export potrebbe essere temporaneamente non disponibile oppure è stata permanentemente spostata a un nuovo indirizzo web.
    Questo è il codice che uso
    Codice PHP:
    public function exportXml(){
        
          
    $racc Raccomandata::select('*')->where('isGenerated','=',0)->get->toArray();

            
    //creo un file .ZIP in cui inserisco gli xml relativi alle raccomandate
            
    $zip = new \ZipArchive;foreach($racc as $r){
               
               
    $xw xmlwriter_open_memory();
              
                   
    // codice per generale il file xml
                
               
    $xml xmlwriter_output_memory($xw);

                        
    $zip = new \ZipArchive();
                if(
    $zip->open('my_zip_test.zip'ZipArchive::CREATE) === TRUE){

                    
    //aggiungo i file xml allo zip                
                     
    $zip->addFile($response);
                    
    //chiudo il file zip                
                   
    $zip->close();           
                }
      
                
    $response Response::create('OK' ,200); 
               
    $response->header('Content-Type''application/zip');
                
    $response->header('Content-Transfer-Encoding''Binary'); 
               
    $response->header('Content-Length'$zip);
                
    $response->header('Content-Description''File Transfer'); 
               
    $response->header('Content-Disposition''attachment; filename="file.zip"'); 
               
    $response->header('Content-Transfer-Encoding''binary'); 
               return 
    $response;
                        
            
         }

    Sbaglio nel creare la Response?
    Ultima modifica di EziT90; 02-08-2021 a 09:24

  6. #6

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    119
    Quote Originariamente inviata da filippo.toso Visualizza il messaggio
    Grazie Filippo per l'aiuto ...proverò questo pacchetto composer per la creazione dello zip

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2021 vBulletin Solutions, Inc. All rights reserved.