상세 컨텐츠

본문 제목

JSP에서 파일 업로드 및 엑셀파일 JSON으로 만들기

Developer/Java

by 웰크 2016. 12. 2. 15:36

본문

JSP에서 파일 업로드 및 엑셀파일 JSON으로 만들기

(자료 보관용)


필요한 jar 파일

commons-collections4-4.1.jar

cos.jar

poi-3.15.jar

poi-examples-3.15.jar

poi-excelant-3.15.jar

poi-ooxml-3.15.jar

poi-ooxml-schemas-3.15.jar

poi-scratchpad-3.15.jar

twitter4j-core-4.0.4.jar

xmlbeans-2.3.0.jar

------------------------------------------------------------------------------------


test.jsp

<form method="post" enctype="multipart/form-data" action="test2.jsp">

<input type="file" name="file">

<input type="submit" value="전송">

</form>


test2.jsp

// 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);

%>

'Developer > Java' 카테고리의 다른 글

Spring Cloud config - 구성 및 적용  (0) 2019.11.22
Spring Cloud config - 설명  (0) 2019.11.21
자바 공부에 필요한 사이트 정리  (0) 2016.04.26

관련글 더보기