티스토리 뷰

input file로 업로드를 하고 업로드된 파일에 다운로드를 링크를 a 태그로 걸어 다운로드 하기.
과거 spring 에서는 tomcat server.xml 에 다운로드 폴더를 context path에 추가하고
/도메인/{#context path#}/{#파일명#}
이런식으로 다운로드 url을 간단하게 생성해서 썼었었다.
하지만 springboot 에서는 내장 tomcat이 자동으로 설정되기 때문에 docbase 를
내가 application.yml 에 지정하긴 힘들고 (변수 발생 가능)
EmbeddedServletContainerCustomizer 인터페이스로 톰캣 구성을 설정해 줄 수는 있는데...
그냥 파일다운로드 컨트롤러 하나 생성하는게 더 올바른 방법일 것 같음 ㅋㅋㅋ
위 이미지 업로드 파일을
/도메인/download/{파일id} 로 url을 생성하려고 한다.
@GetMapping(value="/download/{uuid}")
public ResponseEntity<Resource> download(@PathVariable String uuid) throws MalformedURLException {
AttachedFileDTO file = fileService.getFileInfo(uuid);
String filename = file.getFilenameOriginal();
String filePath = file.getFilePath() + File.separator + file.getFilenameReal();
Resource resource = new UrlResource(Paths.get(filePath).toUri());
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + UriUtils.encode(filename, "UTF-8") + "\"")
.body(resource);
}
파일 id 값으로 파일정보를 가져오는 서비스를 만들고
사용자에게 보여줄 업로드된 파일명,
서버에 실제 업로드 되어있는 경로와 실제파일명을 변수 할당하고
실제 정보파일을 리턴받아서 ResponseEntity body 에 전달한다.
헤더 정보도 파일로 바로 받을 수 있게 변경한다.
첨부파일명이 한글일 경우 인코딩없이 전달하면 다운로드 시 한글파일 명이 깨져서 보이니
utf-8 로 인코딩 할 것!
그럼 이제 사용자 화면에서 a tag로 파일다운로드 url 을 생성해준다.
<a id="download_link" href="/download/015ACEA16EA245D9E065000000000001">2023_테스트_엑셀파일_한글.xlsx</a>
다운로드 파일 링크를 클릭하면
위에 작성한 controller 를 타면서 파일 다운로드가 된다.
'Java > SpringBoot&Spring' 카테고리의 다른 글
[Gradle] Mybatis xml 파일, 타경로 빌드에 포함시키기 (feat.IntelliJ) : mapped statements collection does not contain value for 문제 해결 (0) | 2023.08.10 |
---|---|
[SpringBoot] JavaMailSender 메일 보내기. (0) | 2023.08.03 |
[Spring] AsyncRestTemplate 을 이용한 REST API Call. (0) | 2023.06.28 |
[Spring] ObjectMapper, java8 LocalDateTime 유형 직렬화/역직렬화 오류 (feat.Jackson) (0) | 2023.06.08 |
[Spring] IBsheet8 데이터처리 공통 제네릭 메소드 작성. (0) | 2023.06.07 |