Skip to content

Instantly share code, notes, and snippets.

@frjufvjn
Created August 19, 2020 01:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save frjufvjn/18336bff4af66f10ae1a132c20e063db to your computer and use it in GitHub Desktop.
Save frjufvjn/18336bff4af66f10ae1a132c20e063db to your computer and use it in GitHub Desktop.
<%@ page contentType="text/html; charset=utf-8" pageEncoding="UTF-8" buffer="20kb" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.io.BufferedWriter" %>
<%@ page import="java.io.FileOutputStream" %>
<%@ page import="java.io.OutputStreamWriter" %>
<%@ page import="java.util.stream.Collectors" %>
<%@ page import="com.locus.jedi.log.ErrorLogger" %>
<%@ page import="com.locus.jedi.service.sql.SQLParam" %>
<%@ page import="com.locus.jedi.service.sql.SQLServiceManager" %>
<%@ page import="com.locus.jedi.transfer.ListParam" %>
<%@ page import="com.locus.jedi.waf.controller.JediRequest" %>
<%@ page import="com.locus.jedi.waf.controller.JediResponse" %>
<%@ page import="java.net.URLEncoder" %>
<jsp:useBean id="jediReq" class="com.locus.jedi.waf.controller.JediRequest" scope="request"/>
<jsp:useBean id="jediRes" class="com.locus.jedi.waf.controller.JediResponse" scope="request"/>
<%!
private String getBrowser(HttpServletRequest request) {
String header = request.getHeader("User-Agent");
if (header.contains("MSIE")) {
return "MSIE";
} else if (header.contains("Chrome")) {
return "Chrome";
} else if (header.contains("Opera")) {
return "Opera";
} else if (header.contains("Trident")) {
return "Trident"; //for IE11
}
return "Firefox";
}
%>
<%
try {
SQLParam sqlParam = new SQLParam();
sqlParam.setSqlName("jw.test.excel"); // TODO
sqlParam.addValue("device_id", ""); // TODO
SQLParam sqlResult = SQLServiceManager.getInstance().execute(sqlParam);
ListParam l = sqlResult.getListParam(sqlResult.getResultName());
StringBuffer sb = new StringBuffer();
String[] cols = l.getColumns();
sb.append(Arrays.stream(cols).collect(Collectors.joining(",")));
for (int i=0; i<l.rowSize(); i++) {
String rowValue = "";
for (int j=0; j<l.colSize(); j++) {
if (j ==0) {
rowValue += l.getParam(i).getString(cols[j]);
} else {
rowValue += "," + l.getParam(i).getString(cols[j]);
}
}
sb.append(System.lineSeparator() + rowValue.replaceAll("null", "").replaceAll("NULL", "") );
}
ErrorLogger.info("result : " + System.lineSeparator() + sb.toString());
/* 파일생성 테스트
try ( BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:/doc/test11.csv"), "MS949")) ) {
bw.write(sb.toString());
} catch (Exception e) {
ErrorLogger.error("##csv write error ## " + e.getMessage());
}
*/
String fileName = "한글파일명.csv"; // TODO
String header = getBrowser(request);
if (header.contains("MSIE") || header.contains("Trident")) {
String docName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-Disposition", "attachment;filename=" + docName + ";");
} else if (header.contains("Firefox")) {
String docName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
response.setHeader("Content-Disposition", "attachment; filename=\"" + docName + "\"");
} else if (header.contains("Opera")) {
String docName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
response.setHeader("Content-Disposition", "attachment; filename=\"" + docName + "\"");
} else if (header.contains("Chrome")) {
String docName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
response.setHeader("Content-Disposition", "attachment; filename=\"" + docName + "\"");
}
response.setContentType("application/octet-stream");
response.setHeader("Content-Transfer-Encoding", "binary;");
response.setHeader("Pragma", "no-cache;");
response.setHeader("Expires", "-1;");
out.clearBuffer();
out.print("\ufeff"); //for UTF-8 data
//아래에 CSV 파일 내용을 출력한다.
out.print(sb.toString());
out.flush();
} catch (Exception e) {
ErrorLogger.error("#### " + e.getMessage());
} finally {
if (out != null) {
out.close();
}
}
%>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment