Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Scrittura di un byte array decodificato in un file pdf

    Salve ragazzi. Mi trovo di fronte a questo inghippo. In pratica ho un servizio rest in java che riceve il contenuto di un file in formato Base64, ed ho la necessità di scrivere questo contenuto in un file che creo io. Vi espongo un pò di codice.

    codice:
    @Path("/recivePdf")
    @Produces("application/pdf")
    public @ResponseBody String savePdfAccettazione(
                @RequestBody String contenuto){
    
    //mi decodifico il contenuto in un array di byte
    byte[] contenutoFile = Base64.decodeBase64(contenuto);
    //scelgo e compongo il percorso del file
    percorsoPath += file + File.separator + risorsa+"_"+idAccettazione+".pdf";
    FileOutputStream filePath;
    try {
    //lo scrivo in filePath.
    filePath = new FileOutputStream(percorsoPath);
    filePath.write(contenutoFile);
    filePath.flush();
    filePath.close();
    } catch (IOException e) {
        System.out.println("Errore nella creazione del file:" + e.getMessage());
    }
    }
    Fin qui tutt'ok. Il file me lo crea e ci scrive pure il contenuto. L'unica cosa è che non posso aprirlo. Quando lo apro mi dice che non è stato decodificato correttamente.

    Vi elenco le dipendenze di maven che ho usato.
    codice:
    <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.4</version>
    </dependency>
    e le librerie usate per la decodifica sono org.apache.commons.codec.binary.Base64;

    Qualcuno può aiutarmi? Grazie in anticipo.
    Vit
    File allegati File allegati
    Ultima modifica di victorArt; 19-05-2015 a 10:48

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Cosa contiene quel String contenuto? Puoi postarne un pezzetto reale? (anche solo una cinquantina di caratteri).

    Il resto del codice, ad occhio e grosso modo, mi pare perlomeno sensato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    A parte la gestione delle eccezioni (che può essere fatta molto meglio), non vedo errori in questa parte di codice.
    Sicuro che non sia il client a fare qualcosa di sbagliato in fase di codifica base64?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Beh che sia il client io non ne ho idea, perchè viene generato e codificato non da me. la stringa contenuto contiene le informazioni del file che poi decodifico, qua non me le fa inserire...

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Quote Originariamente inviata da victorArt Visualizza il messaggio
    Beh che sia il client io non ne ho idea, perchè viene generato e codificato non da me. la stringa contenuto contiene le informazioni del file che poi decodifico, qua non me le fa inserire...
    Una stringa Base64 contiene solo ed esclusivamente caratteri ASCII in un set limitatissimo (di 64 simboli, appunto), tutti perfettamente gestibili dal forum... come detto da andbin, dovresti postare almeno la prima parte per verificare che l'header PDF codificato sia corretto: puoi tranquillamente incollare i primi 50 caratteri della stringa "contenuto", all'interno dei tag CODE.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Visto che non ci riuscivo vi invio il contenuto che mi arriva. L'ho allegato in un file. Stesso nel messaggio il primo.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Tutta la prima parte di quel file va rimossa prima di darla in pasto al decodificatore... infatti è un "preambolo" che evidentemente viene aggiunto dal client.

    La parte "data:application/pdf;base64," va tolta di mezzo: è quello che scombina tutto.

    Il file PDF inizia dove iniziano i caratteri "JVBERi0xL".


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    La parte "JVBERi0xLjMKMyAwIG ........" è corretta, perché decodificata da base64 è:

    %PDF-1.3
    3 0 obj
    <</Type /Page
    /Parent 1 0 R
    /Resour

    che effettivamente è l'inizio corretto di un PDF.

    Il problema è la parte prima: "data:application/pdf;base64,". Questa non mi pare possa essere gestita da Base64.decodeBase64
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Infatti ho risolto togliendo la prima parte dal contenuto che mi arriva.Ora il file si apre correttamente Thanks

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