Pergunta

Eu tenho analisado um Objeto JSON que foi enviada para o meu TOMCAT server usando o POST e transformou-o em um arquivo CSV.Eu gostaria de enviar o arquivo CSV para o usuário.Estou confuso sobre como enviar o arquivo de volta, porque todos os exemplos que tenho visto fazer referência a um ficheiro que é armazenado no servidor - o meu arquivo é criado na memória e, na verdade, não fazer referência a um arquivo/arquivo descritor tanto quanto eu posso dizer.

//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();
}
Foi útil?

Solução

O que você tem a fazer para enviar um arquivo para o usuário a partir de um servlet?

  1. Definir o tipo de conteúdo.
  2. Escrever bytes.

Parece-me que você está fazendo isso, mas na ordem errada.Também, ao invés de usar o application/octet-stream você pode querer realmente saber o navegador esta é CSV.Você também pode querer dar-lhe um nome de ficheiro.

    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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top