질문투성이
30
2020-09-16 20:23:54
0
38

ExcelDownloadview, abstracview 엑셀 생성후 메세지 넘기기


안녕하세요.

아래와 같이 excel 생성 후, 오류 발생 시, response에 print 사용하여 메세지가 출력이 됩니다.

성공했을때도 메세지를 넘겨주고 싶은데,

printwriter을 사용하면 이지 rsponse에 getouputstream이 사용되어집니다.

뷰에서 submit 하기전에 팝업으로 데이터를 추출중입니다 알림창을 띄우고

성공 후, 데이터 추출이 완료되었다고 메세지를 띄우고 싶습니다.

감사합니다.

package com.milvus.config.view;

import java.awt.Color;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.stereotype.Component;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.servlet.view.AbstractView;

@Component("excelDownloadView")
public class ExcelDownloadView extends AbstractView{
private SXSSFWorkbook wb;

@Override
public String getContentType() { return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; }

@Override
protected void renderMergedOutputModel(Map<String, Object> map, HttpServletRequest request, HttpServletResponse response) throws Exception {
wb = (SXSSFWorkbook)map.get("wb");
String path = request.getServletContext().getRealPath("/WEB-INF/temp");
String todate = (new SimpleDateFormat("YYYY-MM-dd HH_mm_ss").format(new Date()));
String filename = path + "/" + map.get("fileName").toString();
OutputStream os = null;
FileInputStream fis = null;
File file = null;
try{
FileOutputStream fo = new FileOutputStream(filename);
wb.write(fo);
wb.dispose();
fo.flush();
fo.close();
file = new File(filename);
response.setContentType(this.getContentType());
response.setContentLength((int)file.length());
String header = request.getHeader("User-Agent");
if(header.contains("Chrome") || header.contains("Opera") || header.contains("Firefox")){ response.setHeader("Content-Disposition", "attachment; fileName=" + new String(file.getName().getBytes("UTF-8"), "ISO-8859-1") + ";"); }
else { response.setHeader("Content-Disposition", "attachment; fileName=" + URLEncoder.encode(file.getName(),"UTF-8").replaceAll("\\+", "%20") + ";"); }
response.setHeader("Content-Transfer-encoding", "binary");
os = response.getOutputStream();
fis = new FileInputStream(file);
FileCopyUtils.copy(fis, os);
fis.close();
os.flush();
os.close();
}catch(Exception e){
PrintWriter out = response.getWriter();
out.print("<script>alert('파일 생성 도중 오류가 났습니다.\\n관리자에게 문의 바랍니다.'); location.reload;</script>");
out.flush();
out.close();
} finally {
if(os != null){ os.close(); }
if(fis != null){ fis.close(); }
if(file != null) { file.delete(); }

}
}
}
0
  • 답변 0

  • 로그인을 하시면 답변 을 등록할 수 있습니다.