Java HttpServlet comment télécharger fichier excel

Je suis en train d'ajouter une fonction à mon application web qui permet aux utilisateurs de télécharger un fichier excel.

Je suis en train de réaliser avec le code suivant:

@Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        File file = new File("d:/test/test.xls");
        response.setContentType("application/xls");
        response.addHeader("Content-Disposition", "attachment; filename=test.xls");
        response.setContentLength((int) file.length());

        try {
            FileInputStream fileInputStream = new FileInputStream(file);
            OutputStream responseOutputStream = response.getOutputStream();
            int bytes;
            while ((bytes = fileInputStream.read()) != -1) {
                responseOutputStream.write(bytes);
            }
            fileInputStream.close();
            responseOutputStream.close();

        } catch (FileNotFoundException e) {
            //TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            //TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

Je suis en mesure de télécharger le fichier excel avec le code ci-dessus, cependant, le fichier est corrompu. Si je l'ouvre avec microsoft excel, j'obtiens une fenêtre avec le message:

"le format de fichier et l'extension de la ne correspondent pas. le fichier peut être endommagé ou dangereux".

Et le fichier excel est vide.

Après l'exécution du code, le fichier d'origine(d:/test/test.xls) obtient également endommagé.

Ce que je fais mal?

  • Êtes-vous sûr que le fichier excel est valide avant de l'attemting le télécharger? Peut-être que c'est déjà endommagé avant que le processus?
  • Oui j'en suis sûr à ce sujet.
  • Eh bien, une chose est sûre, le code que vous avez posté ne doute pas de la modifier ou de corrompre votre fichier Excel.
  • Quelle est la taille de votre fichier? Il est très grand, peut-être?
  • Pourquoi ne pas lire le fichier en tant que morceau au lieu de par octets? Quelque chose comme this.
  • Attendez une seconde, le fichier d'origine est corrompu? Quelque chose d'autre doit être corrompant, puis la servlet envoyé le fichier corrompu.
  • Avez-vous résolu ce problème maintenant? Je rencontre le même problème maintenant.

InformationsquelleAutor MeesterPatat | 2014-10-28