반응형

의존성 추가

compile "org.apache.commons:commons-csv:1.8"

 

java 메소드

@GetMapping(value = "/returnCSV", produces = "text/csv")
public ResponseEntity<Resource> exportCSV() {

	///////csv 컬럼명
	String[] csvHeader = { "번호", "이름", "나이" };

	//////csv 데이터
	List<List<String>> csvBody = new ArrayList<>();
	csvBody.add(Arrays.asList("1", "Williams", "25"));
	csvBody.add(Arrays.asList("2", "Smith", "44"));
	csvBody.add(Arrays.asList("3", "Brown", "31"));

	ByteArrayInputStream byteArrayOutputStream;

	try (
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		CSVPrinter csvPrinter = new CSVPrinter(new PrintWriter(out),CSVFormat.DEFAULT.withHeader(csvHeader));
	){
		for (List<String> record : csvBody){
			csvPrinter.printRecord(record); 
		}
		csvPrinter.flush();
		byteArrayOutputStream = new ByteArrayInputStream(out.toByteArray());
    	
	} catch (IOException e) {
		throw new RuntimeException(e.getMessage());
	}

	InputStreamResource fileInputStream = new InputStreamResource(byteArrayOutputStream);

	String csvFileName = "people.csv";

	//////Http 헤더설정
	HttpHeaders headers = new HttpHeaders();
	headers.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + csvFileName);
		
	//////Content Type 설정(text/csv)
	headers.set(HttpHeaders.CONTENT_TYPE, "text/csv");

	return new ResponseEntity<Resource>(fileInputStream,headers,HttpStatus.OK);
}

 

전달되는 데이터는 이렇게 생김

번호,이름,나이
1,Williams,25
2,Smith,44
3,Brown,31

 

웹에서 csv 전달받는 javascript 코드

전달받은 csv 을 웹에서 파일로 다운로드 

fetch("http://localhost:8080/test",{
                    method : 'POST',
                    mode : 'cors',
                    cache : 'no-cache',
                    headers: {'Content-Type': 'application/json'},
                    credentials : 'same-origin',
                    redirect : 'follow',
                    referrer : 'no-referrer',
                    body: JSON.stringify(obj),
}).then(response => response.text())
  .then(function(res){
  	let csv=[];
	csv.push(res);
    
	////////한글 처리를 해주기 위해 BOM 추가
	csv = "\uFEFF" + csv;

	let csvFile = new Blob([csv], { type: "text/csv" });
	let downloadLink = document.createElement("a");
	downloadLink.download = "filename.csv";
	downloadLink.href = window.URL.createObjectURL(csvFile);
	downloadLink.style.display = "none";
	document.body.appendChild(downloadLink);
 	downloadLink.click();
})

 

 


Javascript에서 csv 생성 및 다운로드

 

[JavaScript] CSV 생성 및 다운로드

1. 다운로드 버튼 클릭 이벤트 $("#excelDownload").click(function () { let filename = "testFile.csv"; getCSV(filename); }); 2. CSV 생성 함수 function getCSV(filename) { var csv = []; var row = []; //1..

mchch.tistory.com

 

fetch 사용

 

[JavaScript] fetch 사용법, fetch 응답 사용, fetch 변수 사용

ajax 대신 사용하는 api 호출 방법 fetch() 기본 //fetch를 호출하면 브라우저는 네트워크 요청을 보내고 promise를 반환한다. let promise = fetch(url, {options}) fetch(url, options) //api호출 성공 시 응답(..

mchch.tistory.com

 

csv return 방법 참고

 

Returning CSV Content From an API in Spring Boot

Avoiding conversion overhead by returning CSV data directly

codeburst.io

 

반응형

+ Recent posts