Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스프링데이터흐름
- javaservlet
- paging
- joinfetch
- Generic
- 자바서블릿
- 제너릭
- 엔티티직접사용
- Hibernate
- calendar
- JPQL
- 대량쿼리
- springflow
- jQuery값전달
- jscalendar
- namedQuery
- LIST
- 벌크연산
- fetchjoin
- 프로젝트생성
- jQuery값전송
- values()
- fullcalendar
- 페치조인
- jQueryUI
- 제네릭
- 페이징
- JPA
- javascriptcalendar
- JQuery
Archives
- Today
- Total
가자공부하러!
11. Spring Boot 파일 업로드/파일 다운로드 본문
1. 기초 설정
> spring boot version 2.1.7(Spring Starter Project, Maven Project)
> jdk 8
> sts3
> 필요 디펜던시(보이기/숨기기) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <!-- file io on web --> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/com.servlets/cos --> <dependency> <groupId>com.servlets</groupId> <artifactId>cos</artifactId> <version>09May2002</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> | cs |
> upload 관련 설정
- 순서
- application.yml에 파일 업/다운로드 관련 설정 추가
- PdsController에 파일 업로드 관련 내용 세팅
- RequestParam : MultipartFile fileload
- 실제 파일 업로드 코드 : org.apache.commons.io.FileUtils.writeByteArrayToFile(File file, byte[] data);
- spring.servlet.multipart.maxFileSize, spring.servlet.multipart.maxRequestSize
- application.yml에 등록
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | spring: datasource: hikari: jdbc-url: jdbc:oracle:thin:@localhost:1521/xe pool-name: hikari-cp maximum-pool-size: 30 minimum-idle: 2 driver-class-name: oracle.jdbc.OracleDriver username: -- password: -- servlet: multipart: max-file-size: 10MB max-request-size: 10MB enabled: true | cs |
- PdsController 업로드 부분
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | /**자료실 게시물 저장하는 메소드 * @param model * @param sourceFile * @return * @throws IOException */ @RequestMapping(value = "pds/savefile", method = RequestMethod.POST) public String showPdsSaveFile(Model model, @RequestParam(value="fileload", required = false) MultipartFile fileload, PdsDTO pdsDTO, HttpServletRequest req) throws IOException { System.out.println("show pds" + fileload.getOriginalFilename()); //서버에 파일을 저장할 때에는 파일명을 시간값으로 변경 //DB에 저장할 때에는 원본 파일명과 시간값을 모두 저장 //filename 취득 String filename = fileload.getOriginalFilename(); pdsDTO.setFilename(filename); pdsDTO.setOrigin_filename(filename); //upload 경로 설정(tomcat realpath) String fuploadPath = req.getServletContext().getRealPath("/upload"); //폴더 경로 설정 String f = pdsDTO.getFilename(); String newfilename = FUpUtil.name(f); //업로드 수행 pdsDTO.setFilename(newfilename); File file = new File(fuploadPath + "/" + newfilename); System.out.println("pdswrite pdsdto : " + pdsDTO.toString()); try { //실제 파일이 업로드 되는 부분 FileUtils.writeByteArrayToFile(file, fileload.getBytes() ); //db에 값 저장 pdsService.uploadPds(pdsDTO); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "pdswrite.tiles"; } | cs |
> download 관련 설정
- 순서 : view에서 Controller로 다운로드 요청을 보내면 컨트롤러에서 다운로드 수행
- PdsController 다운로드 부분
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | /**파일이름, seq 번호를 받아서 해당 파일을 다운로드 시켜주는 기능을 가진 메소드 * @param param * @param req * @return * @throws IOException */ @RequestMapping(value = "pds/downloadfile", method = {RequestMethod.GET, RequestMethod.POST}) public ResponseEntity<Resource> downloadFile(String filename, int seq, HttpServletRequest req) throws IOException { //경로 설정 String fuploadPath = req.getServletContext().getRealPath("/upload"); //파일정보 설정 PdsDTO pdsdto = pdsService.getOnePds(seq); String fileName = pdsdto.getFilename(); String origin_fileName = pdsdto.getOrigin_filename(); File file = new File(fuploadPath + "/" + fileName); HttpHeaders headers = new HttpHeaders(); headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); headers.add("Pragma", "no-cache"); headers.add("Expires", "0"); headers.add("Content-Disposition", "attatchment; filename=\"" + new String(origin_fileName.getBytes("UTF-8"), "ISO-8859-1") + "\""); InputStreamResource resource = new InputStreamResource(new FileInputStream(file)); return ResponseEntity.ok() .headers(headers) .contentLength(file.length()) .contentType(MediaType.parseMediaType("application/octet-stream")) .body(resource); } | cs |
'공부 > Spring Boot' 카테고리의 다른 글
뷰(form)에 입력한 많은 데이터를 List 타입으로 컨트롤러로 보내는 방법 (4) | 2019.09.09 |
---|---|
12. Spring Boot Gradle 프로젝트 생성 방법(Thymeleaf) (0) | 2019.09.04 |
10. WARN : jdbc.driver 관련 (0) | 2019.08.29 |
9. Spring Boot(2.1.6) Maven 프로젝트 welcome! 보기 + tiles 적용 (0) | 2019.08.29 |
8. Thymeleaf with tiles/sitemesh - 중단 (0) | 2019.07.24 |
Comments