반응형
여승철
INTP 개발자
여승철
  • 분류 전체보기 (376)
    • CS (16)
      • 면접 준비 (7)
      • 운영체제 (0)
      • 네트워크 (2)
      • HTTP (6)
      • 스프링(Spring) IoC 컨테이너 (0)
      • 알고리즘 (1)
    • Web (13)
    • AWS (6)
    • Java (43)
    • JSP & Servlet (65)
      • 개념 (42)
      • 실습 (23)
    • Spring Framework (33)
    • Spring Boot (10)
    • Spring Data (22)
      • JPA (14)
      • Query DSL (7)
      • Redis (1)
    • Spring Security (9)
    • Spring Batch (4)
    • MyBatis (10)
    • Front-End (51)
      • JS (27)
      • Vue.js (17)
      • React (5)
      • JQuery (0)
      • d3.js (2)
    • DBMS (24)
      • SQL, RDBMS (16)
      • MongoDB (5)
      • Redis (3)
    • Kafka (3)
    • 리눅스 (Linux) (4)
    • 디자인 패턴 (3)
    • VCS (8)
    • API (0)
    • TOOL (3)
    • Reading Book (28)
      • 이펙티브 자바 (11)
      • Clean Code (10)
      • 1분 설명력 (4)
      • HOW TO 맥킨지 문제해결의 기술 (3)
    • C# (4)
    • NSIS (6)
    • ETC (11)

블로그 메뉴

  • 홈
  • 태그

인기 글

태그

  • 이펙티브 자바
  • servlet
  • 로그인
  • JSTL
  • querydsl
  • Spring Batch
  • 디자인 패턴
  • HTTP
  • EC2
  • JDBC
  • 게시판
  • 회원 관리
  • ubuntu
  • 환경 세팅
  • mybatis
  • jsp
  • 스트림
  • Dao
  • controller
  • 맥킨지

최근 댓글

최근 글

hELLO· Designed By 정상우.
여승철

INTP 개발자

ETC

Spring + Ajax 섬네일 파일 생성, 이미지 파일인지 구분, 이미지 클릭 시 원본 이미지 출력

2022. 9. 25. 22:09
반응형

섬네일

Thumbnailator 라이브러리를 사용하하여 섬네일 파일 생성

 

 

설정

▶pom.xml

<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
<dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>0.4.8</version>
</dependency>

이미지 파일인지 구분

섬네일은 이미지 파일에만 적용할 수 있기 때문에 이미지 파일인지 구분한다.
아래 코드에 이미지 파일인 경우 섬네일 파일을 생성하는 것을 확인할 수 있다.
	private boolean checkImageType(File file) {

		try {
			String contentType = Files.probeContentType(file.toPath());

			return contentType.startsWith("image");

		} catch (IOException e) {
			e.printStackTrace();
		}

		return false;
	}

	@PostMapping("/uploadAjaxAction")
	public void uploadAjaxPost(MultipartFile[] uploadFile) {

		String uploadFolder = "D:\\upload";

		// make folder --------
		File uploadPath = new File(uploadFolder, getFolder());

		if (uploadPath.exists() == false) {
			uploadPath.mkdirs();
		}
		// make yyyy/MM/dd folder

		for (MultipartFile multipartFile : uploadFile) {

			String uploadFileName = multipartFile.getOriginalFilename();

			uploadFileName = uploadFileName.substring(uploadFileName.lastIndexOf("\\") + 1);
			log.info("only file name: " + uploadFileName);

			UUID uuid = UUID.randomUUID();

			uploadFileName = uuid.toString() + "_" + uploadFileName;

			try {
				File saveFile = new File(uploadPath, uploadFileName);
				multipartFile.transferTo(saveFile);
                
				// image 파일인지 체크하는 checkImageType 메소드 호출
				if (checkImageType(saveFile)) {
					
                    //맞는 경우 섬네일 파일 생성
					FileOutputStream thumbnail = new FileOutputStream(new File(uploadPath, "s_" + uploadFileName));

					Thumbnailator.createThumbnail(multipartFile.getInputStream(), thumbnail, 100, 100);

					thumbnail.close();
				}

			} catch (Exception e) {
				e.printStackTrace();
			} // end catch
		} // end for

	}

파일 업로드 시 이미지 파일인 경우 원본 파일은 그대로 저장되고 이름이 's_'로 시작하는 섬네일 파일이 생성된다.

 

  • checImageType() 메소드
    • 이미지 파일을 구분할 수 있도록 구현
  • Thumbnailator
    • InputStream과 java.io.File 객체를 이용해 파일을 생성하였다.
    • 생성시 뒤에 사이즈에 대한 부분을 파라미터로 width, height를 지정할 수 있다.

 

반응형

'ETC' 카테고리의 다른 글

Spring + Ajax 파일 다운로드 시 Internet Explorer, Edge에서 한글이름 깨짐  (0) 2022.09.26
Spring + Ajax 파일 다운로드  (0) 2022.09.26
Spring + Ajax 중복된 파일 이름 해결  (0) 2022.09.25
Spring + Ajax 파일 확장자, 크기 제한 (Ajax)  (0) 2022.09.25
Spring + Ajax 파일 업로드  (0) 2022.09.25
    여승철
    여승철

    티스토리툴바