CSV 열기를 사용하여 ServletOutputStream에서 파일을 보냅니다
문제
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();
}
. 해결책
서블릿에서 사용자에게 파일을 보내려면 어떻게해야합니까?
- 콘텐츠 형식을 설정합니다.
- 바이트를 씁니다.
가이 일을하고있는 것처럼 보이지만 잘못된 순서로 보입니다.또한 응용 프로그램 / 옥텟 스트림을 사용하는 대신 브라우저에 실제로 알려주고 싶을 수 있습니다. 이것은 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();
.제휴하지 않습니다 StackOverflow