Comment télécharger un fichier du site web - Java/Jsp

Comment télécharger un fichier à partir du site Web - Java / Jsp

Ici, je montre un exemple Java simple pour montrer comment laisser l'utilisateur télécharger un fichier à partir du site Web. Peu importe que vous utilisiez struts, JSP, Spring ou tout autre framework java, la logique est la même.

1) Nous devons d'abord définirHttpServletResponse response pour indiquer au navigateur que le système va renvoyer un fichier d'application au lieu d'une page html normale

response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition",
"attachment;filename=downloadfilename.csv");

nous pouvons également spécifier un nom de fichier de téléchargement dansattachment;filename=, l'exemple ci-dessus exporte un nom de fichier csv «downloadfilename.csv» pour le téléchargement de l'utilisateur.

2) Il existe 2 façons de permettre à l'utilisateur de télécharger un fichier à partir du site Web

Lire le fichier à partir de l'emplacement physique

File file = new File("C:\\temp\\downloadfilename.csv");
FileInputStream fileIn = new FileInputStream(file);
ServletOutputStream out = response.getOutputStream();

byte[] outputByte = new byte[4096];
//copy binary contect to output stream
while(fileIn.read(outputByte, 0, 4096) != -1)
{
    out.write(outputByte, 0, 4096);
}
fileIn.close();
out.flush();
out.close();

Exportez les données de la base de données ou la chaîne directement vers InputStream pour téléchargement par l'utilisateur.

StringBuffer sb = new StringBuffer("whatever string you like");
InputStream in = new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
ServletOutputStream out = response.getOutputStream();

byte[] outputByte = new byte[4096];
//copy binary contect to output stream
while(in.read(outputByte, 0, 4096) != -1)
{
    out.write(outputByte, 0, 4096);
}
in.close();
out.flush();
out.close();

3) Terminé

Ici, je montre mon exemple Struts pour montrer comment écrire directement des données dans InputStream et les sortir en tant que «temp.cvs» pour permettre à l'utilisateur de télécharger.

public ActionForward export(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {

    //tell browser program going to return an application file
        //instead of html page
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition","attachment;filename=temp.csv");

    try
    {
        ServletOutputStream out = response.getOutputStream();
        StringBuffer sb = generateCsvFileBuffer();

        InputStream in =
                    new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));

        byte[] outputByte = new byte[4096];
        //copy binary contect to output stream
        while(in.read(outputByte, 0, 4096) != -1)
        {
            out.write(outputByte, 0, 4096);
        }
        in.close();
        out.flush();
        out.close();

      }
      return null;
    }

private static StringBuffer generateCsvFileBuffer()
{
    StringBuffer writer = new StringBuffer();

    writer.append("DisplayName");
    writer.append(',');
    writer.append("Age");
    writer.append(',');
    writer.append("HandPhone");
    writer.append('\n');

        writer.append("example");
    writer.append(',');
    writer.append("26");
    writer.append(',');
    writer.append("0123456789");
    writer.append('\n');

    return writer;
}