2017-10-03 1 views
-1

J'ai écrit un contrôleur Java qui gère toute demande de téléchargement du serveur. Mes fichiers sont présents dans le serveur mais je reçois un fichier de 0 Ko téléchargé à chaque fois. Le fichier est téléchargé mais la taille est toujours 0 Kb. Aidez-moi, s'il vous plaît. Voici mon code -Téléchargement de fichier Java - La taille du fichier téléchargé est toujours zéro Kb

@RequestMapping(value="/downloadFile/{docId}") 
    public void getDownloadFile(@PathVariable(value = "docId") Integer docId, HttpServletResponse response) throws Exception { 
     String userName = getUserName(); 
     try { 
      DocVault documentsVault = documentsVaultRepository.findDocumentAttachment(docId); 
      String fileName = documentsVault.getDocumentName(); 
      int customerId = documentsVault.getCustomerId(); 

      Map<Integer, String> customerInfo = cspUtils.getCustomersInfo(userName); 
      Set<Integer> customerIds = customerInfo.keySet(); 
      for (int custId : customerIds) { 
       if (custId == customerId) { 
        String path = env.getProperty("doc.rootfolder") + File.separator + documentsVault.getFileName(); 
        service.downloadFile(fileName, path, response); 
       } else { 
        logger.info("Customer not linked to user"); 
       } 
      } 
     } catch (Exception e) { 
      logger.error(e.getMessage(), e); 
     } 
    } 

Mise en œuvre -

public void downloadFile(String fileName, String path, HttpServletResponse response) { 

     try { 
      File downloadFile = new File(path); 
      FileInputStream inputStream = new FileInputStream(downloadFile); 

      response.setContentLength((int) downloadFile.length()); 
      response.setHeader("Content-Disposition", "attachment;filename=" + fileName); 

      // get output stream of the response 
      OutputStream outStream = response.getOutputStream(); 

      byte[] buffer = new byte[BUFFER_SIZE]; 
      int bytesRead = -1; 

      // write bytes read from the input stream into the output stream 
      while ((bytesRead = inputStream.read(buffer)) != -1) { 
       outStream.write(buffer, 0, bytesRead); 
      } 
      inputStream.close(); 
      outStream.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Je ne reçois aucune exception. S'il vous plaît aider. Merci d'avance.

Répondre

0

Nous vous remercions de votre aide. Ce que j'ai compris, c'est qu'il y avait un problème avec mon en-tête Content Disposition. Je passais seulement le nom de fichier sans extension. Quand j'ai passé le nom de fichier complet, cela a fonctionné parfaitement. La taille et l'extension du fichier étaient correctes.

0
response.setContentLength((int) downloadFile.length()); 

Enlever ceci. Le conteneur le définira automatiquement.

int bytesRead = -1; 

Vous n'avez pas besoin d'initialiser cette variable. Il est assigné à la ligne suivante.

+0

Merci pour l'entrée. Maintenant, la taille est correcte. Mais le type de fichier est simplement téléchargé en tant que 'fichier' au lieu de .txt, .pdf, .doc, etc. Pouvez-vous aider? Auparavant aussi ce problème était là. –

+0

alors - peut-être vérifier (via la console de développement ou le fiddler) quel en-tête 'Content-Disposition' est retourné. Je vois que vous l'avez réglé correctement, mais vous devriez vérifier quelle est la vraie valeur retournée au navigateur. – gusto2

+0

@HarshitGupta L'activité "Enregistrer sous" dépend entièrement de ce que vous envoyez en tant que "Content-disposition". – EJP