문제

POST를 사용하여 Tomcat 서버로 전송 된 JSON 객체를 파싱하고 CSV 파일로 전환했습니다.CSV 파일을 사용자에게 다시 보내고 싶습니다.서버에 저장된 실제 파일을 참조했기 때문에 파일을 다시 보내는 방법에 대해 혼란스러워합니다.이 파일은 메모리에 내장되어 있으며 실제로 파일 / 파일 설명자가 참조 할 수있는 한 실제로 파일 / 파일 설명자를 참조하지 않습니다.말해.

//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();
}
.

도움이 되었습니까?

해결책

서블릿에서 사용자에게 파일을 보내려면 어떻게해야합니까?

  1. 콘텐츠 형식을 설정합니다.
  2. 바이트를 씁니다.
  3. 가이 일을하고있는 것처럼 보이지만 잘못된 순서로 보입니다.또한 응용 프로그램 / 옥텟 스트림을 사용하는 대신 브라우저에 실제로 알려주고 싶을 수 있습니다. 이것은 CSV입니다.또한 파일 이름을주고 싶을 수도 있습니다.

        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();
    
    .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top