Pregunta

He analizado un objeto JSON que se envió a mi servidor Tomcat usando POST y lo convirtió en un archivo CSV.Me gustaría enviar el archivo CSV al usuario.Estoy confundido acerca de cómo enviar el archivo hacia atrás porque todos los ejemplos he visto hacer referencia un archivo real que se almacena en el servidor: mi archivo está incorporado en la memoria y en realidad no hace referencia a un descriptor de archivo / archivo en lo que puedodecir.

//The doPost method has already generated the String[] - I then call generateCSV


protected void generateCSV(ArrayList<String[]> data, ServletOutputStream out,
                           HttpServletResponse response)
{
    try{
        BufferedWriter buff = new BufferedWriter(new OutputStreamWriter(out));
        CSVWriter writer = new CSVWriter(buff);
            writer.writeAll(data);
            writer.close();

        sendFile(response, out);

    }catch(IOException | ServletException e){

        e.printStackTrace();
    }


}


protected void sendFile(HttpServletResponse response, ServletOutputStream outstream)throws ServletException, IOException
{
    response.setContentType("application/octet-stream");
    outstream.flush();
    outstream.close();
}

¿Fue útil?

Solución

¿Qué tiene que hacer para enviar un archivo al usuario desde un servlet?

  1. establece el tipo de contenido.
  2. escribe los bytes.
  3. me parece que estás haciendo esto, pero en el orden equivocado.Además, en lugar de usar la aplicación de aplicación / octeto, es posible que desee decirle al navegador, esto es CSV.También es posible que desee darle un nombre de archivo.

        response.setContentType("text/csv");
        response.setHeader("Content-Disposition","filename=whatever.csv");
        BufferedWriter buff = new BufferedWriter(new OutputStreamWriter(out));
        CSVWriter writer = new CSVWriter(buff);
            writer.writeAll(data);
            writer.close();
    

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top