2014-10-17 7 views
7

Stiamo generando i nostri rapporti utilizzando JasperReports 5.6.1 e consentendo di esportare lo stesso modello in PDF o Powerpoint. Quando si esegue localmente, i file PDF e PPTX scaricati funzionano perfettamente. Quando distribuiamo sui nostri server, il PDF funziona bene, ma i file PPTX non possono essere aperti. Quando eseguiamo localmente, viene distribuito su tomcat, ma quando viene distribuito sul server è in esecuzione su Websphere.Problema di download del rapporto esportato su PPTX quando installato sul server

cose che ho provato e ho notato:

  • ho controllato i ceppi, e non ci sono eccezioni o nulla per sollevare le sopracciglia.
  • Il file scaricato è in genere leggermente più grande di quello che otteniamo quando eseguiamo localmente.
  • Se ho modificato l'estensione dei file in zip e li ho archiviati. La struttura del file e i nomi dei file sono gli stessi, insieme ai file che hanno le stesse dimensioni del file. I contenuti sembrano essere solo diversi nei nomi degli oggetti trovati in ogni diapositiva.
  • pensando che potrebbe essere un problema con i file di tipo x Ho provato anche a esportare in xlsx, solo per vedere cosa sarebbe successo e funziona perfettamente con lo stesso modello.
  • Ho aggiunto un file pptx statico che era noto e che può essere scaricato senza problemi dal server. L'ho fatto per cercare di eliminare una configurazione del server dal problema, e ho percepito che funzionava, presumo che sia qualcosa con il mio codice, ma non sono sicuro di cosa.

Qui è il codice per cui scriviamo la risposta:

if ("xlsx".equals(type)) { 
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
    response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".xlsx"); 
} else if ("pptx".equals(type)) { 
    response.setContentType("application/vnd.openxmlformats-officedocument.presentationml.presentation"); 
    response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".pptx"); 
    response.setCharacterEncoding("UTF-8"); 
} else { 
    response.setContentType("application/pdf"); 
    response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".pdf"); 
} 
try (final ByteArrayOutputStream reportResult = reportsService.generateReport(
     getDeal(userId, dealId, sessionStore), 
     getScenarioModel(userId, dealId, scenarioId, sessionStore), reportId, type)) { 
    configureResponse(response, type, reportResult, dealId + "-" + scenarioId); 
    // Write to http response 
    reportResult.writeTo(response.getOutputStream()); 
} 

response.flushBuffer(); 

ho esaurito le idee sui passi di risoluzione dei problemi, e senza essere in grado di riprodurre a livello locale, mi sto trovando difficile da diagnosticare .

+0

Qualcuno ha avuto la soluzione per questo problema? Stiamo lottando per lo stesso problema. Qualcuno può aiutare su questo? –

+0

Impostazioni percorso classe? La stessa versione di Java locale e lato server? Stessa versione della libreria JasperReports? Tutte le librerie dipendenti installate? Stesse versioni? Registrazione per testare l'albero decisionale? (Inoltre, per amore dei futuri manutentori, ti preghiamo di eliminare il codice duplicato ...) –

risposta

3

Questo è un po 'di buio, ma sei sicuro che il tipo mime sia configurato correttamente nelle istanze di WebSphere? (Mi rendo conto che l'impostazione del tipo di contenuto nella risposta dovrebbe ovviare al requisito che il server Web sia configurato per quel tipo MIME, ma dopo tutto è WebSphere ;-))

Sono disposto a scommettere che il PDF è un tipo MIME configurato ma PPTX no. Puoi controllare?

  1. Accedere al WAS Console
  2. Vai a host virtuali
  3. , clicca sul link chiamato tipi MIME

(here's a more detailed technote)

IIRC, a differenza di Tomcat che è (per mancanza di un termine migliore) tipo di un contenitore di stack e servlet all-in-one "in bundle", WebSphere ha uno stack http separato (insieme a una JVM separata per ogni app), quindi non sorprende che config potrebbe essere necessaria una notifica che non sarebbe per contenitori più semplici.

+0

sì, sono d'accordo, dovresti farlo e se manca c'è bisogno di aggiungere il tuo tipo MIME ('application/vnd.openxmlformats-officedocument.presentationml.presentation') lì – borowis

Problemi correlati