geoinfo_admin/src/main/webapp/RexServer30/getreport.jsp

129 lines
4.0 KiB
Plaintext

<%@ page contentType="text/html;charset=UTF-8"%><%@page import="java.util.*, java.io.*, java.lang.String, java.text.*, java.net.*" %><%
// request.setCharacterEncoding("utf-8");
//------------------------------------
// 0. 파라메터 받음
//------------------------------------
String sReportName = (request.getParameter("rptname") == null ? "" : request.getParameter("rptname"));
//------------------------------------
// 1. 상수 정의
//------------------------------------
//String sBasePath = "D:\\rexpert30\\RexServer30\\rebfiles\\samples\\";
String sBasePath = application.getRealPath("/") + "/rebfiles/";
sReportName = unescape(sReportName);
sReportName += ".reb";
//System.out.println(sReportName);
//------------------------------------
// 4. export 파일 읽어서 전송
//------------------------------------
File file = new File(sBasePath + "" + sReportName); // 절대경로
byte b[] = new byte[4062];
response.reset();
String strClient=request.getHeader("User-Agent");
if(strClient.indexOf("MSIE 5.5")>-1)
{
response.setContentType("application/x-msdownload; charset=euc-kr");
response.setHeader("Content-Disposition", "attachment;filename=report.reb"); //+new String(sReportName.getBytes("euc-kr"),"8859_1"));
//response.setHeader("Content-Disposition", "attachment;filename="+sReportName);
} else {
response.setContentType("application/x-msdownload; charset=euc-kr");
response.setHeader("Content-Disposition", "attachment;filename=report.reb"); //+new String(sReportName.getBytes("euc-kr"),"8859_1"));
//response.setHeader("Content-Disposition", "attachment;filename="+sReportName);
}
response.setHeader("Content-Transfer-Encoding", "binary;");
response.setHeader("Pragma", "no-cache;");
response.setHeader("Expires", "0;");
response.setContentLength((int)file.length()); //파일크기를 브라우저에 알려준다.
// IE 5.5는 형식이 다르므로 헤더를 각각 다르게 처리해 준다.
if (file.isFile())
{
out.clear();
BufferedInputStream fin = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
int read = 0;
while ((read = fin.read(b)) != -1){
outs.write(b,0,read);
outs.flush();
}
outs.close();
fin.close();
//out = pageContext.pushBody();
}
file = null;
%><%!
public String getCurrentPath(ServletContext application, HttpServletRequest request)
{
return new File(
application.getRealPath(
request.getServletPath()
)
).getParentFile().getAbsolutePath();
}
public String escape(String src) {
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6);
for (i = 0; i < src.length(); i++) {
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j)
|| Character.isUpperCase(j))
tmp.append(j);
else if (j < 256) {
tmp.append("%");
if (j < 16)
tmp.append("0");
tmp.append(Integer.toString(j, 16));
} else {
tmp.append("%u");
tmp.append(Integer.toString(j, 16));
}
}
return tmp.toString();
}
public String unescape(String src) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf("%", lastPos);
if (pos == lastPos) {
if (src.charAt(pos + 1) == 'u') {
ch = (char) Integer.parseInt(src.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
} else {
ch = (char) Integer.parseInt(src.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}
} else {
if (pos == -1) {
tmp.append(src.substring(lastPos));
lastPos = src.length();
} else {
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}
%>