2009-09-04 10 views
2

Y at-il un truc pour obtenir une vue personnalisée SpringMVC pour provoquer un téléchargement de fichier dans le broswer? J'ai implémenté la méthode render de org.springframework.web.servlet.View mais le code entraîne l'écriture de mes données sur la page sous la forme d'un blob de données au lieu d'une action de téléchargement.action de téléchargement spring-mvc

try { 

    Document oDoc = (Document) model.get("oDoc"); 
    out = new PrintWriter(response.getOutputStream()); 

    response.setContentType("application/vnd.ms-excel"); 
    response.setHeader("content-disposition", "attachment; filename=file.xls"); 

    GenerateXLSFile gof = new GenerateXLSFile(); 

    gof.outputTSVFromDom(out, oDoc); 

} catch block here { 

    //writes to log here 

} finally { 

    if (out != null) { 
     out.flush(); 
     out.close(); 
    } 

} 

Je sais que la méthode de rendu est appelée à partir des journaux du serveur. Je sais que GenerateXLSFile est créé à partir des journaux du serveur. Je sais que le fichier outputTSVFromDom peut prendre un document et le transformer à partir de mon test JUnit. Il écrit également dans le journal du serveur et se termine. Les données se retrouvent dans le navigateur. Les en-têtes HTTP semblent normaux selon firebug. Aucune erreur du bloc catch n'est dans le journal du serveur.

Qu'est-ce qui me manque ici?

+0

Avez-vous essayé de jongler avec le type de contenu, pour voir ce qui se passe si vous le changez en quelque chose d'autre (qui devrait aussi être téléchargeable), comme application/octet-stream? – Jherico

+0

Essayez 'out = response.getWriter();' – serg

Répondre

5

Tout d'abord, quelle API utilisez-vous? Les documents Excel sont binaires, vous devez donc utiliser OutputStream, pas Writer.

En second lieu, le printemps est un support intégré pour servir les documents Excel:

+0

il était plus facile de réécrire ceci pour utiliser AbstractExcelView que pour conserver l'ancien code tabulé. – sal

Questions connexes