이전글
https://greed-yb.tistory.com/236
[Java] ExcelUpload - 파일 읽고 DB에 insert 하기
Java 17 Maven Spring Boot 3.0.3 Oracle 11g IntelliJ Ultimate DBeaver SpringBoot 환경에서 메서드만 이용하여 Excel Upload 기능 할 일이 있어서 테스트 Class 에서 진행하였다 main 메서드를 이용해서 하려면 Junit 을 이용
greed-yb.tistory.com
poi 추가
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.8</version>
</dependency>
html + js
<div>
<input type="file" id="uploadTest">
</div>
<script type="application/javascript">
$("#uploadTest").change(function(event) {
let file = event.target.files[0];
if (file) {
var formData = new FormData();
formData.append("file", file);
$.ajax({
url : "/파일업로드 주소",
method: "POST",
enctype: 'multipart/form-data',
contentType: false, // FormData 를 사용하면 Content Type 을 multipart/form-data 으로 변경 되므로 덮어쓰지 않도록 false 필수
processData: false, // 문자열로 변환하지 않고 있는 그대로 전송하기 위함 false 필수
data: formData,
success: function(data){
if(data == "success"){
console.log("success");
}else{
console.log("fail");
}
},
error(e){
console.log("error: " + e);
}
})
}
});
</script>
change 함수를 사용했으나 본인 상황에 맞춰서 click 등으로 변경할 것
controller
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Map;
@Controller
@RequestMapping("/주소")
public class TestController {
@RequestMapping(value="/uploadTest.do", method = RequestMethod.POST)
private String uploadTest(@RequestParam("file") MultipartFile file) throws Exception{
try {
// .xlsx 확장자
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
// .xls 확장자
// HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
int seetNum = workbook.getNumberOfSheets();
for (int i = 0; i < seetNum; i++) {
// .xlsx 확장자
XSSFSheet sheet = workbook.getSheetAt(i);
// .xls 확장자
// HSSFSheet sheet = workbook.getSheetAt(i);
int rows = sheet.getPhysicalNumberOfRows();
// 엑셀 데이터를 읽어서 담기 위한 map
Map<Integer, String> map = new HashMap();
// 0번째 행은 이름인 경우가 대부분이기에 1부터 시작함
// 필요에 따라 0부터 시작하면 됨
for (int j = 1; j < rows; j++) {
// .xlsx 확장자
XSSFRow row = sheet.getRow(j);
// .xls 확장자
// HSSFRow row = sheet.getRow(j);
int cells = row.getPhysicalNumberOfCells();
for (int k = 0; k < cells; k++) {
// .xlsx 확장자
XSSFCell cell = row.getCell(k);
// .xls 확장자
// HSSFCell cell = row.getCell(k);
String value = "";
if (cell == null) {
continue;
} else {
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_FORMULA:
value = cell.getCellFormula();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
// 날짜의 경우 숫자로 가져오기 때문에 변환을 해줘야한다
if(DateUtil.isCellDateFormatted(cell)) {
Date tempDate = cell.getDateCellValue();
value = new SimpleDateFormat("yyyy-MM-dd").format(tempDate);
}else {
value = String.valueOf((int) cell.getNumericCellValue()) + "";
}
break;
case XSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue() + "";
break;
case XSSFCell.CELL_TYPE_BLANK:
value = cell.getBooleanCellValue() + "";
break;
case XSSFCell.CELL_TYPE_ERROR:
value = cell.getErrorCellValue() + "";
break;
}
}
// System.out.println(j +"번 행, " + k +" 번 열 값 : "+ value);
map.put(k, value);
}
System.err.println("test : " + map.toString());
}
}
} catch (IOException e) {
e.printStackTrace();
return "fail";
} catch (Exception e) {
throw new RuntimeException(e);
}
return "sucess";
}
TEST
1번째 행의 데이터부터 정상적으로 가져온다
웹에서 업로드하는 글이 없길래 새로 추가해 본다
확장자 검증 및 확장자에 따른 코드 변환은
각각 javascript , controller 에서 해주면 되고,
중복제거는 hashSet 을 선언하여 데이터 중복을 막아줘도 된다
'개발 > Java' 카테고리의 다른 글
[JAVA] Thumbnails을 이용한 ImageUpload resize 적용하기 (0) | 2024.07.16 |
---|---|
[JAVA] FileUpload(이미지, 파일, 삭제) 및 Download 구현하기 (0) | 2024.07.15 |
[JAVA] CPU , Memory , Disk 사용량 확인하기 (0) | 2024.07.09 |
[JAVA] 파일 생성, 삭제, 쓰기, 이름변경, 이동, 복사, 읽기 하기 (1) | 2024.05.21 |
[JAVA] REST API 구현하기(API KEY) - Postman 이용 (0) | 2023.09.07 |
댓글