Nexacro + Spring 연동 실습기 (2) - 파일 다운로드 구현 및 Multipart 관련 에러 방지
Nexacro + Spring 연동 실습기 (2) - 파일 다운로드 구현 및 Multipart 관련 에러 방지
1️⃣ FileDownload, FileDownTransfer 컴포넌트 실습 과정
📦 실습 목표
- Nexacro 17에서 FileDownload, FileDownTransfer 컴포넌트로 파일(엑셀) 다운로드 실습
- Spring(MVC) 백엔드와 연동하여 실제 파일 응답 처리
- 파라미터 전송 방식별 동작 차이 체크
🛠️ 주요 실습 내용
- 넥사크로 XFDL 버튼에 스크립트 연결
- FileDownload: 정적 파일 직접 다운로드(
.set_url()+.download()) - FileDownTransfer: 동적 다운로드/파라미터 포함 전송(
.download(url)혹은.setPostData())
- FileDownload: 정적 파일 직접 다운로드(
- Spring Controller 구현
void타입 직접 OutputStream으로 응답ResponseEntity<byte[]>RESTful 방식 실습
- 배포(deploy) 후 톰캣에서 실제 테스트
- nexacro studio에서 ‘Deploy’ 실행하여 웹 배포경로에 반영되어야 웹브라우저에서 변경사항 확인 가능
- 웹브라우저에서 FileDownTransfer 컴포넌트의 onerror, onsucces 이벤트 캐치 불가(런타임 전용 이벤트)
- trace()사용시, 웹브라우저에서는 console.log() 형태로 작동
2️⃣ Multipart 에러 원인 및 방지법
❗ 발생 가능한 에러 현상
- 넥사크로에서 FileDownTransfer 컴포넌트 사용시,
.setPostDat()사용시,
Spring에서 Multipart Casting 에러발생
🔎 원인 분석
- 넥사크로가
.setPostData()로 multipart/form-data 요청을 보냄 - Spring에서 MultipartResolver가 제대로 적용되어 있지 않거나,
multipart로 변환된 request를
다른 타입(HttpServletRequest 등)으로 잘못 캐스팅할 때 발생
🛠️ 방지/해결 방법
- MultipartResolver를 올바르게 등록
- web.xml, Java Config, 또는 Spring Boot 설정에
multipartResolverbean 명확히 추가
- web.xml, Java Config, 또는 Spring Boot 설정에
- 컨트롤러/필터/인터셉터에서 올바른 타입으로 캐스팅
- multipart 요청일 때만 MultipartHttpServletRequest로 캐스팅
- 필요시 instanceof 체크
1
2
3
4
if (request instanceof MultipartHttpServletRequest) {
MultipartHttpServletRequest multiReq = (MultipartHttpServletRequest) request;
// 파라미터 추출 등 안전하게 처리
}
- FileDownTransfer 사용시, multipart 관련 에러 방지
- 다운로드 실행 전,
.clearPostDataList();호출 ※ FileDownload 컴포넌트 사용 등 우회(단, 다운로드 전 파일생성 필요)
- 다운로드 실행 전,
This post is licensed under CC BY 4.0 by the author.