본문 바로가기

JAVA

[JAVA] 이미지 업로드하기

728x90
반응형

@ResponseBody
@PostMapping("/file/upload")
public ApiSuccess upload(
HttpSession session,
@RequestParam(value = "accept", required = false) String accept,
@RequestParam(value = "isProductImage", required = false) boolean isProductImage,
@RequestParam(value = "limit", required = false, defaultValue = "0") long limit,
@RequestParam(value = "width", required = false, defaultValue = "0") int width,
@RequestParam(value = "height", required = false, defaultValue = "0") int height,
@RequestParam(value = "maxWidth", required = false, defaultValue = "0") int maxWidth,
@RequestParam(value = "maxHeight", required = false, defaultValue = "0") int maxHeight,
@RequestPart MultipartFile file
) throws Exception {
    IpssUserDto ipssUser = (IpssUserDto) session.getAttribute("ipssUser");
    String entrNo = ipssUser.getEntrNo();

    ApiSuccess<Map<String, Object>> result = new ApiSuccess<>();

    String filename = file.getOriginalFilename();
    long size = file.getSize();
    String contentType = file.getContentType();
    String extension = FilenameUtils.getExtension(filename).toLowerCase();

    log.debug("accept : {}", accept);
    if (accept.length() > 0) {
        boolean pass = Arrays.asList(accept.split(",")).contains("." + extension);
        log.debug("====> {}, {}, {}, {}", accept, extension, pass, Arrays.asList(accept.split(",")));
        if (!pass) {
            throw new ProductFileUploadException("파일 형식 " + accept + " 파일만 등록 가능합니다.");
        }
    }

    log.debug("limit : {}", limit);
    if (limit > 0) {
        if (size > limit) {
            throw new ProductFileUploadException("용량 " + limit + "KB 이하 파일만 등록 가능합니다.");
        }
    }

    log.debug("width x height : {} x {}}", width, height);
    if (!extension.equals("zip") && width > 0 && height > 0) {
        BufferedImage bi = ImageIO.read(file.getInputStream());
        if (bi.getWidth() < width || bi.getHeight() < height) {
            throw new ProductFileUploadException("이미지는 최소 " + width + "x" + height + "이상 등록 가능합니다.");
        }
    }

    log.debug("maxWidth x maxHeight : {} x {}}", maxWidth, maxHeight);
    if (!extension.equals("zip") && maxWidth > 0 && maxHeight > 0) {
        BufferedImage bi = ImageIO.read(file.getInputStream());
    if (bi.getHeight() > maxHeight) {
       throw new ProductFileUploadException("이미지 세로 사이즈는 " + maxHeight + "px 이하로 등록 가능합니다.");
       }
    }

    result.setData(tempFileUploadService.saveTempFile(isProductImage, entrNo, file));
    
    return result;
}

728x90
반응형