2017-10-13 17 views
0

J'ai reçu ce message d'erreur lorsque je suis en train de télécharger le fichier:UT010006: Impossible d'appeler getWriter(), getOutputStream() déjà appelé

ne pouvait pas gérer exception !: java.lang.IllegalStateException: UT010006: Impossible appelez getWriter(), getOutputStream() déjà appelé.

Le fichier est téléchargé mais sans extension. Alors le navigateur me demande quel programme devrait être utilisé pour le lire.

Ceci est mon code de téléchargement:

InputStream fileIs = null; 
    OutputStream output = null; 
    try {    
     ExternalContext externalContext = getContext().getExternalContext(); 
     externalContext.responseReset(); 
     externalContext.setResponseContentType(fileToDownload.getMetadata().getMimeType()); 
     externalContext.setResponseContentLength(fileToDownload.getMetadata().getTaille().intValue()); 
     externalContext.setResponseHeader("Content-Disposition", "attachment; filename=\"" + fileToDownload.getMetadata().getFileName() + "\""); 

     output = externalContext.getResponseOutputStream(); 
     Response repGetFile = ClientBuilder.newClient() 
       .target(fileToDownload.getMetadata().getFileURL()) 
       .request().header("Authorization", "Bearer bearercode") 
       .get(); 

     fileIs = repGetFile.readEntity(InputStream.class); 
     int readBytes; 
     byte[] buffer = new byte[1024]; 
     while((readBytes = fileIs.read(buffer)) > 0){ 
      output.write(buffer, 0, readBytes); 
     } 
     output.flush(); 

    } catch (IOException ex) { 
     LOG.log(Level.SEVERE, null, ex); 
    } finally{ 
     try { 
      fileIs.close(); 
      output.close(); 
     } catch (IOException ex) { 
      LOG.log(Level.INFO, null, ex); 
     } 
    } 

Répondre

0

Je crois que le problème est que vous ne output.flush() le fichier dans le corps d'essai. Le fichier est fermé uniquement lorsqu'une exception est créée ultérieurement dans le corps final que vous incluez également dans un autre corps d'essai. Je crois que vous devriez fermer la sortie après la première chasse.

output.flush(); 
output.close();