Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    76

    Trasformare ZipOutputStream in byte[]

    Come spiegato in quest'altra discussione...
    http://forum.html.it/forum/showthrea...readid=1242809

    non riesco ad inserire su un campo blob di un database Oracle un ZipOutputStream!

    Il problema e' che non riesco a trasformare lo ZipOutputStream in byte[]!

    Idee???

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Trasformare ZipOutputStream in byte[]

    Originariamente inviato da krisc1
    Come spiegato in quest'altra discussione...
    http://forum.html.it/forum/showthrea...readid=1242809

    non riesco ad inserire su un campo blob di un database Oracle un ZipOutputStream!

    Il problema e' che non riesco a trasformare lo ZipOutputStream in byte[]!

    Idee???
    A dire il vero (e scusa se non ho più risposto nell'altra discussione) è che non ho capito il tuo dubbio. Più o meno l'avevo spiegato: se hai un Blob, ne ottieni l'OutputStream che usi per creare un ZipOutputStream (mettendo in mezzo, se vuoi, un BufferedOutputStream). A quel punto fai tutto quel ciclo di scrittura delle entry che avevi postato all'inizio.
    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
    Sep 2004
    Messaggi
    76

    Re: Re: Trasformare ZipOutputStream in byte[]

    Originariamente inviato da andbin
    A dire il vero (e scusa se non ho più risposto nell'altra discussione) è che non ho capito il tuo dubbio. Più o meno l'avevo spiegato: se hai un Blob, ne ottieni l'OutputStream che usi per creare un ZipOutputStream (mettendo in mezzo, se vuoi, un BufferedOutputStream). A quel punto fai tutto quel ciclo di scrittura delle entry che avevi postato all'inizio.
    Ok... non avevo capito io il tuo consiglio... cmq... ora l'ho messo in atto... ma non riesco a inserire il file blob! Adesso... con il tuo consiglio... il codice e' diventato:

    codice:
    // il vero codice non e' questo.... queste sono solo le query!!!
    INSERT INTO miaTab (id, nome_file, file) VALUES (1,"nome",oracle.sql.BLOB.getEmptyBLOB())
    // Recupero il record appena inserito nella tabella :
    ResultSet rs = "SELECT file FROM miaTab where ID = 1";
    
    
    //  Inserisco il nuovo valore per il campo blob:
    Blob zipBlob =(Blob) rs.getBlob(1);
    OutputStream outS = zipBlob.setBinaryStream(0);              
    BufferedOutputStream boutS = new BufferedOutputStream(outS);
    
    // Creo il file zip utilizzando new ZipOutputStream(boutS);
    ZipOutputStream zipFile= creaZip()
    
    boutS.close();
    Non da errori.... ma in realta'... non salva nessun file zip nel blob!!!!
    Le altri volte ho inserito un campo blob attraverso il codice di prima (le query) inserendo pero' (dopo aver recupertato il boutS dalla select) il codice:
    codice:
    byte [] blob = zipFile;
    boutS.write(blob);
    boutS.flush();
    boutS.close();
    ma andavo ad inserire un Array di Byte!!!!

    Non so più cosa fare!!!! Help HELP HEEEEELP!!!!!!!!

    Cmq... intanto moooolte grazie per l'aiuto!!!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Trasformare ZipOutputStream in byte[]

    Originariamente inviato da krisc1
    // Creo il file zip utilizzando new ZipOutputStream(boutS);
    ZipOutputStream zipFile= creaZip()
    Ma glielo passi boutS a creaZip()???

    Originariamente inviato da krisc1
    Non da errori.... ma in realta'... non salva nessun file zip nel blob!!!!
    Se non sbaglio, lo Statement devi ottenerlo dalla Connection richiedendo espressamente come concurrency ResultSet.CONCUR_UPDATABLE.
    E alla fine si dovrebbe fare updateRow() sul ResultSet.
    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
    Sep 2004
    Messaggi
    76

    Re: Re: Re: Re: Trasformare ZipOutputStream in byte[]

    Originariamente inviato da andbin
    Ma glielo passi boutS a creaZip()???
    Si!
    codice:
    Blob zipBlob =(Blob) rs.getBlob(1);
    OutputStream outS = zipBlob.setBinaryStream(0);              
    BufferedOutputStream boutS = new BufferedOutputStream(outS);
    
    ZipOutputStream fileZip = new ZipOutputStream(boutS);
    // Set the compression ratio
    fileZip.setLevel(Deflater.DEFAULT_COMPRESSION);
    // iterate through the array of files, adding each to the zip file
    byte[] buffer = new byte[18024];
    
    for (int i = 0; i < comunicazione.size(); i++) {
    	InputStream file =(InputStream) comunicazione.get(i); 
    	// Associate a file input stream for the current file
    	ZipEntry zip = new ZipEntry(titoloZip+"_"+i+".html");
    	// Add ZIP entry to output stream.
    	fileZip.putNextEntry(zip);
    	// Transfer bytes from the current file to the ZIP file
    	int len;
    	while ((len = file.read(buffer)) > 0) {
    		fileZip.write( buffer, 0, len);
    	}
    	// Close the current entry
    	fileZip.closeEntry();
    }
    // Close the ZipOutPutStream
    fileZip.close();
    Se non sbaglio, lo Statement devi ottenerlo dalla Connection richiedendo espressamente come concurrency ResultSet.CONCUR_UPDATABLE.
    E alla fine si dovrebbe fare updateRow() sul ResultSet.
    Beh... effettivamente non facevo l'inserimento del blob in questo modo.... solo che usiamo un framework che crea la connessione e fa il prepareStatement... ecc.!
    Ho provato ... ma devo modificare un po' di cosette.... va beh.... se non ci sono altri suggerimenti... provo a modificare il framework!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Re: Re: Trasformare ZipOutputStream in byte[]

    Originariamente inviato da krisc1
    se non ci sono altri suggerimenti...
    Un'altra soluzione (ma se non sbaglio, rileggendo adesso l'altra discussione, l'avevi già vista anche se magari non riuscivi a completarla) è quella di ottenere alla fine un byte[].

    Nell'altra discussione vedo che avevi provato con un ByteArrayOutputStream, che di per sé è giusto. Solo che devi tenerti il reference al ByteArrayOutputStream perché una volta chiuso lo ZipOutputStream devi invocare sul ByteArrayOutputStream il metodo toByteArray().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    76
    Originariamente inviato da andbin
    Un'altra soluzione (ma se non sbaglio, rileggendo adesso l'altra discussione, l'avevi già vista anche se magari non riuscivi a completarla) è quella di ottenere alla fine un byte[].

    Nell'altra discussione vedo che avevi provato con un ByteArrayOutputStream, che di per sé è giusto. Solo che devi tenerti il reference al ByteArrayOutputStream perché una volta chiuso lo ZipOutputStream devi invocare sul ByteArrayOutputStream il metodo toByteArray().
    GRANDEEEEeeee!!! La scelta di ByteArrayOutputStream era la migliore... solo che non andavo a recurperare l'array di byte con toByteArray() ma lavoravo sullo ZipOutputStream!
    Grazie Andrea.... quel 91% te lo mertiti tutto!!!!

    Ciao!!!

  8. #8
    ciao scusa lo so che è passato del tempo ma ho il tuo stesso problema e non riesco a capire come l'hai risolto, cioè come hai fatto ad ottenere il ByteArrayOutputStream...

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da apemaya1620
    come hai fatto ad ottenere il ByteArrayOutputStream
    Puoi chiarire meglio il tuo problema specifico?
    ByteArrayOutputStream non è un "decoratore" (cioè non incapsula un altro OutputStream). Semmai è ByteArrayOutputStream che può appunto essere incapsulato dentro un altro XYZOutputStream.
    Qui se tu "incateni" per esempio ZipOutputStream --> ByteArrayOutputStream devi comunque tenerti il reference al ByteArrayOutputStream. Dopo che hai scritto/(flushato)/chiuso sul ZipOutputStream potrai prendere l'array di byte dal ByteArrayOutputStream. Questo è solo un esempio comunque.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    quello che non riesco a capire è come collegare il ByteArrayOutputStream con lo ZipOutputStream...

    ho scritto una cosa del genere:
    FileInputStream fis = new FileInputStream(new File(getTempDir(), fileZip));
    ZipInputStream zis = new ZipInputStream(fis);

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ZipOutputStream out = new ZipOutputStream(bos);
    out.setLevel(Deflater.DEFAULT_COMPRESSION);

    ZipEntry entry;
    while ((entry = zis.getNextEntry()) != null) {
    out.putNextEntry(new ZipEntry(entry.getName()));
    int len;
    byte[] byt = new byte[2048];
    while ((len = zis.read(byt)) > 0) {
    out.write(byt, 0, len);
    }
    out.closeEntry();
    }

    byte[] result = bos.toByteArray();


    potrebbe essere giusta?

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.