JSP에서 파일 업로드 및 엑셀파일 JSON으로 만들기
(자료 보관용)
필요한 jar 파일
------------------------------------------------------------------------------------
test.jsp
<form method="post" enctype="multipart/form-data" action="test2.jsp">
<input type="file" name="file">
<input type="submit" value="전송">
</form>
// JSON 변환
<%@page import="twitter4j.JSONArray"%>
// 엑셀파일 분석 및 찾기
<%@page import="org.apache.poi.hssf.usermodel.HSSFDateUtil"%>
<%@page import="org.apache.poi.xssf.usermodel.XSSFWorkbook"%>
<%@page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"%>
<%@page import="org.apache.poi.ss.usermodel.Sheet"%>
<%@page import="org.apache.poi.ss.usermodel.Workbook"%>
<%@page import="org.apache.poi.ss.usermodel.Row"%>
<%@page import="org.apache.poi.ss.usermodel.Cell"%>
<%@page import="org.apache.poi.openxml4j.opc.OPCPackage"%>
// 파일 입출력 및 유틸
<%@page import="java.io.FileInputStream"%>
<%@page import="java.io.File"%>
<%@page import="java.util.*"%>
<%@page import="java.text.SimpleDateFormat"%>
// DefaultFileRenamePolicy 기본적인 이름 규약
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
// MultipartRequest 사용
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page language="java" contentType="text/html; charset=euc-kr" pageEncoding="euc-kr"%>
<%
response.setHeader("Cache-Control", "no-store, no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
// Upload
String path = application.getRealPath("/"); // 경로 설정
MultipartRequest multipartRequest = new MultipartRequest(request, path, 1024*1024*3, "utf-8", new DefaultFileRenamePolicy()); // 파일받기
String originalFileName = multipartRequest.getOriginalFileName("file"); // 파일의 원래이름 저장
File file = multipartRequest.getFile("file"); // 파일 업로드
// Get Extension *.xlsx만 사용가능
FileInputStream excelFile = new FileInputStream(file); // 파일 분석
List<Map<String, Object>> dataList = new ArrayList<Map<String,Object>>(); // 마지막에 리턴할 List
// 엑셀객체로 전환
Workbook workbook = null;
OPCPackage opcPackage = null;
if(originalFileName.endsWith("xlsx") || originalFileName.endsWith("xlsm")){
opcPackage = OPCPackage.open(excelFile);
workbook = new XSSFWorkbook(opcPackage);
} else {
workbook = new HSSFWorkbook(excelFile);
}
Row row = null; // 엑셀의 열
Cell cell = null; // 엑셀의 셀
Map<String, Object> data = null;
Sheet sheet = workbook.getSheetAt(0); // 0번째 시트를 가져옴
List<String> titleList = new ArrayList<String>(); // 첫줄 이름값 따로 저장
// 열을 기준으로 가지고 옴
for(int rowIdx = 0; rowIdx < 101 ; rowIdx++){
row = sheet.getRow(rowIdx); // 한 열을 가져옴
if(row == null || row.getCell(0).getStringCellValue().equals("")) break; // 열이 비어있으면 멈춰라
data = new HashMap<String, Object>(); // 셀마다 가져올 정보
// 열의 셀값을 가지고옴 *두번째 cellIdx < 3 값 직접 입력 조심해야함!*
for(int cellIdx = 0 ; cellIdx < 3 ; cellIdx++){
cell = row.getCell(cellIdx); // 셀정보 가져옴
cell.setCellType(Cell.CELL_TYPE_STRING); // 셀 문자로 설정
// 첫줄 이름
if(rowIdx == 0){
titleList.add(cell.getStringCellValue());
}else{
// 비어 있으면 ""
if(cell==null|| cell.getCellType() == Cell.CELL_TYPE_BLANK){
data.put(titleList.get(cellIdx), "");
}else{
// 데이터 삽입
data.put(titleList.get(cellIdx), cell.getStringCellValue()==null? "":cell.getStringCellValue());
}
}
}
// 한 열이 끝나면 새롭게 생성
if(rowIdx != row.getFirstCellNum()){
dataList.add(data);
}
}
workbook.close(); // 사용한 엑셀 닫기
file.delete(); // 사용한 파일삭제
if(opcPackage != null){ opcPackage.close(); }
// json 데이터 변환
JSONArray json = new JSONArray( dataList.toArray() );
System.out.println(json);
%>
Spring Cloud config - 구성 및 적용 (0) | 2019.11.22 |
---|---|
Spring Cloud config - 설명 (0) | 2019.11.21 |
자바 공부에 필요한 사이트 정리 (0) | 2016.04.26 |