[Springboot] Image Upload

이용준·2024년 2월 1일
0

SpringBoot

목록 보기
2/2

1.이미지 등록(post)

Todo

  1. 사진들이 등록된다.(fileName)
  2. 사진이 null 아니면 이름 불러오기
    • imageList 받을것
  3. uuid는 중복 피함
  4. 저장 경로 설정(imagePath)
  5. 섬네일(라이브러리 처리)
    • 이미지면 썸네일 기준치로 생성
    • 에러면 메세지 output
  @PostMapping('/upload')
  public List<ImageResultDTO ##업로드 처리> upload( ImageFileDTO fileDTO){
  
    if(image.getFiles() != null){
      final List<ImageResultDTO> result = new ArrayList<>();
      
      fileDTO.getFiles().forEach(multiFile -> {
        String origianlName = multiFile.getOriginalFileName();
        
        String uuid = UUID.randomUUID().toString();
        Path savePath = Paths.get(imagePath, uuid+"_"+originalName);
        
        boolean img = false;
        
        try{
          multiFile.transferTo(savePath);
          
          // 섬네일 생성
          if(Files.probContentType(savePat).startsWith("image"){
            img = true;
            File thumbnail = new File(imagePath, "s_"+uuid+"_"+originalName);
            Thumbnailator.createThumbnail(savePath.toFile(), thumbnail, 200, 200);
        }
        } catch (IOException e){
          log.error(e.getMessage());
      )
      list.add(ImageResultDTO.builder.uuid(uuid).imgName(originalName).build());
    }); // end each
    return list;
  } // end if
    return null;
}

2. 이미지 조회

Todo

  • Resource
    InputStream이 물리적 형태로 존재할 경우 모든 리소스 열 수 있음.
    - FileSystemResource : 절대경로라던지 파일시스템에서 리소스를 찾는 방식
  1. 리소스 찾기
  2. HttpHeader 생성(new)
  3. header에 콘텐츠 타입(MIME), 파일 유형 제공
    3-1. 없으면 서버 에러 (InternalServerError)
    3-2. 있으면 헤더(headers) 및 바디 추가(body)
@GetMapping("/view/{fileName}")
public ResponseEntity<Resource> viewFile(@PathVariable String fileName){
  Resource resource = new FileSystemResource(imagePath+File.separtor+fileName);
  
  String resourceName = resourec.getFilename();
  log.info(resourceName)
  
  HttpHeaders headers = new HttpHeaders();
  
  try{
    headers.add("Content-Type", Files.probeContentType(resource.getFile().toPath()));
    
  } catch(Exception e) {
    return ResponseEntity.internalServerError().build();
  }
  return ResponseEntity.ok().header(String.valueOf(headers)).)body(resource);

 }
 
 

3. 이미지 삭제

Todo

  1. 파일 자원 가져오기
  2. HashMap 생성(String, Boolean) - resultMap
  3. Boolean 타입 생성
  4. 파일 타입 프로브
    4-1. 섬네일 있을 경우 제거
    4-2. 없을 경우 에러 메세지 출력
  5. resultMap 출력
@DeleteMapping("/remove/{fileName}")
public Map<String, Boolean> removeFile(@PathVariable String fileName){

  Resource resource = new FileSystemResource(iamgePath+File.Seprator+"s_"+fileName);
  Map<String, Boolean> resultMap = new HashMap<>();
  Boolean remove = false;  
  
  try{
    String contentType = Files.probContentType(resource.getFile().toPath());
    remove = resource.getFile().delete();
    
    if(contentType.startsWith("image"){
      File thumbnail = new File(imagePath+File.separator+"s_"+fileName);
      thumbnail.delet();
  } catch (IOException e){
    log.error(e.getMessage());
 }
 resultMap.put("result", remove);
 return resultMap;
 }
profile
뚝딱뚝딱

0개의 댓글