Visualizzazione dei risultati da 1 a 10 su 12

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    655
    Ho provato la seconda strada scrivendo questo codice:
    codice:
    ByteArrayOutputStream outByteStream = 
    new ByteArrayOutputStream();
    
                workbook.write(outByteStream);
    
                
    byte [] outArray = outByteStream.toByteArray();
    
                response.setContentType(
    "application/OCTET-STREAM");
    
                response.setContentLength(outArray.
    length);
    
                response.setHeader(
    "Expires:", "0"); 
    
                response.setHeader(
    "Content-Disposition", "attachment; filename=testxls.xls");
    
                OutputStream outStream = response.getOutputStream();
    
                outStream.write(outArray);
    
                outStream.flush();
    
    ma ancora nulla!! il file testxls.xls no ne vuole sapere di essere scaricato

    Quote Originariamente inviata da andbin Visualizza il messaggio
    Il problema può essere il fatto di non aver inviato il Content-Length, perlomeno con certi browser ci potrebbe essere.

    Quindi:
    - scarichi il documento su un file temporaneo, poi sapendo la lunghezza invii il Content-Length e poi fai lo streaming in output del file.
    oppure
    - scarichi il documento in memoria su un ByteArrayOutputStream, poi sapendo la lunghezza invii il Content-Length e poi fai lo streaming in output del ByteArrayOutputStream usando il suo writeTo(OutputStream out).

    A tua scelta ....

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da melmar20 Visualizza il messaggio
    codice:
    byte [] outArray = outByteStream.toByteArray();
    Di per sé NON serve ottenere un nuovo byte[] array ... semplicemente è uno spreco di risorse. ByteArrayOutputStream ha size() e il writeTo(OutputStream out) citato prima.

    Ma a parte lo "spreco" di memoria, non vedo nulla di palesemente/grossolanamente errato.

    Quote Originariamente inviata da melmar20 Visualizza il messaggio
    ma ancora nulla!!
    nulla in che senso?

    - la response è completamente vuota o c'è qualcosa?
    - se c'è qualcosa che cosa è? (analizzalo con un hex editor/viewer, eventualmente)
    - c'è qualche eccezione?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    655
    Con nulla intendo che non succede nulla la response non restituisce nessun valore.
    Chiamo la servlet mediante questa chiamata Ajax:
    codice:
    $.ajax({
    
     
     
                url : 
    "CreaFileExcel",
    
                type : 
    "POST",
    
                data : {path:$(
    "#input_file").val()},
    
                async: 
    false,
    
                dataType :
    "json",
    
                processData: 
    false,  
    
                contentType: 
    false, 
    
                success: 
    function(msg)
    
                {
    
                     
    if(msg.esito!=null ) alert("Creato file Log_Errori.xlsx");
    
     
                     
     
    
     
                },
    
                error: 
    function (jqXHR, textStatus, errorThrown) {        
    alert("KO");
    
                    }
            });    
    
    e aimè , non viene visualizzata nessuna finestra di alert.
    Nella console non ho eccezioni e sul server non ho ancora trovalo il file di log dei messaggi di errore.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da melmar20 Visualizza il messaggio
    Chiamo la servlet mediante questa chiamata Ajax:
    Dimentica per un attimo chiamate ajax ecc.. La servlet "a mano" funziona sì o no? (per fare un POST puoi usare un tool per request HTTP, es. Postman in Chrome, o simile)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    655
    ho fatto quanto richiesto.

    questo il risultato
    codice:
     -- response --
    200 OK
    Content-Type:  application/OCTET-STREAM
    Content-Length:  3511
    Expires:  : 0
    Content-Disposition:  attachment; filename=testxls.xlsx
    Content-Language:  it-IT
    Date:  Tue, 29 Nov 2016 14:13:29 GMT
    sembra funzionare la servlet.

    Probabilmente lo stream è corretto, va serializzato però, per compattarlo e farlo diventare un file.
    Questa è quello a cui sto pensando, altrimenti no riesco a darmi ulteriori spiegazini
    Ultima modifica di melmar20; 29-11-2016 a 17:15

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 © 2025 vBulletin Solutions, Inc. All rights reserved.