티스토리 뷰

반응형

JAVA

	@ApiOperation(value="엑셀 다운로드", notes="엑셀다운로드")
    @GetMapping("/excelDownload")
    public ResponseEntity<String> selectItemListExcelDownload(HttpServletRequest request, ItemListReqDto itemListReqDto) {
    	
    	long beforeTime = System.currentTimeMillis();
    	log.info("엑셀 쿼리 조회 시작 : "+beforeTime);
    	
    	List<ItemListResDto> itemList = new ArrayList<ItemListResDto>();     			
    	itemList = service.selectItemListExcelDownload(itemListReqDto);
    	
    	long afterTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기
		long secDiffTime = (afterTime - beforeTime)/1000; //두 시간에 차 계산
		log.info("엑셀 쿼리 조회 : "+secDiffTime);
    	
		beforeTime = System.currentTimeMillis();
    	log.info("엑셀 셍성 시작: "+beforeTime);
    	
    	StringBuilder out = new StringBuilder();
    	int listSize = itemList.size();
    	for(int i=0; i < listSize; i++){
    		if(i==0){
				out.append("\""+"등록일"+"\",");
				out.append("\""+"대 카테고리"+"\",");
				out.append("\""+"중 카테고리"+"\",");
				out.append("\""+"소 카테고리"+"\",");
				out.append("\""+"상품명"+"\",");
			}
    		out.append("\""+itemList.get(i).getRegdate()+"\",");			// 등록일
    		out.append("\""+itemList.get(i).getCl1Name()+"\",");			// 카테고리 대
    		out.append("\""+itemList.get(i).getCl2Name()+"\",");			// 카테고리 중
    		out.append("\""+itemList.get(i).getCl3Name()+"\",");			// 카테고리 소
    		out.append("\""+itemList.get(i).getItName()+"\",");				// 상품명
    	}

    	String pattern = "yyyy_MM_dd";
    	SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
    	String today = simpleDateFormat.format(new Date());    	
    	LocalTime now = LocalTime.now();
    	String hour = Integer.toString(now.getHour());
    	
		String csvName = "목록_"+today+"("+hour+"시 기준).csv";
		HttpHeaders headers = new HttpHeaders(); 
		headers.add("Content-Type", "text/csv; charset=MS949");
		//headers.add("Content-Disposition", String.format("filename=\"%s\"", URLEncoder.encode(csvName, "UTF-8")));
		String userAgent = request.getHeader("User-Agent");
		
		try {
			if (userAgent.indexOf("MSIE 5.5") > -1) { // MS IE 5.5 이하
				headers.add("Content-Disposition", "filename=" + URLEncoder.encode(csvName, "UTF-8").replaceAll("\\+","\\ ") + ";");
			} else {
				headers.add("Content-Disposition", "attachment; filename=" + URLEncoder.encode(csvName, "UTF-8").replaceAll("\\+", "\\ ") + ";");
			}		
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		afterTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기
		secDiffTime = (afterTime - beforeTime)/1000; //두 시간에 차 계산
		log.info("엑셀 셍성 : "+secDiffTime);
		 
		return new ResponseEntity<String>(out.toString(), headers, HttpStatus.OK);        
    }

 

Ajax

$.ajax({
	cache : false,
	url : "localhost:8080/excelDownload",
	type : 'GET', 
	data : $("#form").serialize(), 
	xhrFields: {
		responseType: "blob",
	},
	timeout:200000
}) .done(function (blob, status, xhr) {
	// check for a filename                
	var today = new Date();
	var year = today.getFullYear();
	var month = ('0' + (today.getMonth() + 1)).slice(-2);
	var day = ('0' + today.getDate()).slice(-2);
	var hours = ('0' + today.getHours()).slice(-2); 
	var minutes = ('0' + today.getMinutes()).slice(-2);
	var dateString = year + '-' + month  + '-' + day + '( ' + hours + '시 기준' + ' )';
	var fileName = `리스트_${dateString}`;
	// for IE
	if (window.navigator && window.navigator.msSaveOrOpenBlob) {
		window.navigator.msSaveOrOpenBlob(blob, fileName);
	} else {
		var URL = window.URL || window.webkitURL;
		var downloadUrl = URL.createObjectURL(blob);

		if (fileName) {
			var a = document.createElement("a");

			// for safari
			if (a.download === undefined) {
				window.location.href = downloadUrl;
			} else {
				a.href = downloadUrl;
				a.download = fileName;
				document.body.appendChild(a);
				a.click();
			}
		} else {
			window.location.href = downloadUrl;
		}
	}
});

 

 

 

끗!$@#%!@#~!@#

반응형