# Download JSP-File/Script



## Robert S. (15. Jan 2011)

Hallo in die Runde,

ich versuche gerade ein Download JSP-Script zu schreiben, dafür lese ich eine beliebige Datei ein (FileInputStream) und möchte diese dann byte weise ausgeben (out.print(byteVar));. Das Problem ist das ich kein byte ausgeben kann und es egal wie ich es an out.print übergebe scheinbar immer in irgend etwas konvertiert wird, was am Ende dann dem byte nicht identisch ist. Habe bereits alle möglichen casts in alle möglichen Datentypen versucht, zum erfolg führte bisher nichts.
Hier das Skript in der aktuellen Fassung. Die File die zum Downloaden erzeugt wird und dann auch runtergeladen wird entspricht in der Größe der Ursprungsdatei zu 100% allerdings der Inhalt der File nicht (Ich interpretiere das als Zeichen dafür das ich nicht völlig auf dem Holzweg bin  ).
Wenn jemand eine Lösung weiß wäre ich dafür sehr dankbar, ich experimentiere jetzt schon eine halbe Ewigkeit rum und auch googlen hat mich nicht wirklich weiter gebracht.

[Java]
        File file = new File("c:/Testfile.exe");
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        DataInputStream dis = null;

        response.setContentType(new MimetypesFileTypeMap().getContentType(file));
        response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");

        fis = new FileInputStream(file);

        // Here BufferedInputStream is added for fast reading.
        bis = new BufferedInputStream(fis);
        dis = new DataInputStream(bis);

        // dis.available() returns 0 if the file does not have more lines.
        byte[] fileInBytes = new byte[(int)file.length()];
        dis.read(fileInBytes);
        for(int i = 0; i < fileInBytes.length; i++) {
            out.print((char)fileInBytes_);
        }

        // dispose all the resources after using them.
        fis.close();
        bis.close();
        dis.close();
[/code]_


----------



## maki (16. Jan 2011)

Nutze ein Servlet, keine JSP, JSPs sind templates für Text.


----------



## Robert S. (16. Jan 2011)

Ok, habe ich gemacht. Ändert aber erst einmal das Problem nicht wie mir scheint. Ich kann nach wie vor kein byte ausgeben. processRequest sieht jetzt wie folgt aus:


```
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        try {
            File file = new File("c:/Testfile.exe");
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            DataInputStream dis = null;

            response.setContentType(new MimetypesFileTypeMap().getContentType(file));
            response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");

            fis = new FileInputStream(file);

            // Here BufferedInputStream is added for fast reading.
            bis = new BufferedInputStream(fis);
            dis = new DataInputStream(bis);

            // dis.available() returns 0 if the file does not have more lines.
            byte[] fileInBytes = new byte[(int)file.length()];
            dis.read(fileInBytes);
            for(int i = 0; i < fileInBytes.length; i++) {
                out.print((char)fileInBytes[i]);
            }

            // dispose all the resources after using them.
            fis.close();
            bis.close();
            dis.close();
        } finally { 
            out.close();
        }
    }
```


----------



## Robert S. (16. Jan 2011)

Ist gelöst 

Man nehme 

```
ServletOutputStream out = response.getOutputStream();
```

anstelle von


```
PrintWriter out = response.getWriter();
```


----------

