본문 바로가기
프로젝트/PongGame

FileProcessor

by 히포파타마스 2022. 4. 28.

FileProcessor

해당 프로젝트에서 파일(주로 이미지 파일) 이름을 편집하고 저장하는 등의 역할을 하는 클래스

 

 

 

 

1. FileProcessor

■ FileProcessor

[FileProcessor]

import com.hipo.exception.IllegalRequestException;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Component
public class FileProcessor {

    public String storeFile(MultipartFile multipartFile, String path) throws IOException {

        String storeFilename = createStoreFileName(multipartFile.getOriginalFilename());
        String fullPath = getFullPath(path, storeFilename);

        multipartFile.transferTo(new File(fullPath));
        return storeFilename;
    }

    private String createStoreFileName(String originalFilename) {
        String uuid = UUID.randomUUID().toString();
        String ext = extracted(originalFilename);
        return uuid + "." + ext;
    }

    public String extracted(String originalFilename) {
        int pos = originalFilename.lastIndexOf(".");
        return originalFilename.substring(pos + 1);
    }

    public String getFullPath(String path, String storeFilename) {
        return path + storeFilename;
    }

    public String getMediaType(String fileName) {
        String extracted = extracted(fileName);
        if (extracted.equals("jpeg") || extracted.equals("JPEG")) {
            return MediaType.IMAGE_JPEG_VALUE;
        }
        if (extracted.equals("png") || extracted.equals("PNG")) {
            return MediaType.IMAGE_PNG_VALUE;
        }
        throw new IllegalRequestException("확장자가 jpeg 또는 png가 아닙니다.");
    }
}

 

 

□ storeFile

[storeFile]

public String storeFile(MultipartFile multipartFile, String path) throws IOException {

	//[1]
    String storeFilename = createStoreFileName(multipartFile.getOriginalFilename());
    String fullPath = getFullPath(path, storeFilename);   //[2]

    multipartFile.transferTo(new File(fullPath));   //[3]
    return storeFilename;   //[4]
}

파일을 지정된 경로에 저장한다.

 

● [1] : multipartFile을 받아서 UUID로 새로운 파일 이름을 생성한다(createSotreFileName() = 내부 메서드).

● [2] : path와 저장될 파일의 이름인 storeFilename을 합쳐 파일이 저장될 전체 경로를 생성한다(getFullPath() = 내부 메서드).

● [3] : 앞서 구한 전체 경로에 파일을 저장한다.

● [4] : 저장된 파일의 이름을 반환

 

 

□ createStoreFileName

[createStoreFileName]

private String createStoreFileName(String originalFilename) {
    String uuid = UUID.randomUUID().toString();   //[1]
    String ext = extracted(originalFilename);   //[2]
    return uuid + "." + ext;   //[3]
}

파일 이름을 받아서 저장될 파일 이름을 새롭게 생성하고 반환한다(저장될 파일들은 이름이 겹치면 안 되기 때문).

 

● [1] : UUID패턴을 생성한다.

● [2] : 기존 파일 이름에 확장자를 추출한다(extracted() = 내부 메서드).

ex) test.png -> "png" 추출

 

● [3] : UUID.확장자 형식의 파일 이름 반환

 

 

□ extracted

[extracted]

public String extracted(String originalFilename) {
    int pos = originalFilename.lastIndexOf(".");
    return originalFilename.substring(pos + 1);
}

"."을 기준으로 파일이름에 있는 확장자를 추출하고 반환한다.

 

 

□ getFullPath

[getFullPath]

public String getFullPath(String path, String storeFilename) {
    return path + storeFilename;
}

경로와 저장될 파일이름을 받아서 파일이 저장될 경로를 반환

 

 

□ getMediaType

[getMediaType]

public String getMediaType(String fileName) {
    String extracted = extracted(fileName);
    if (extracted.equals("jpeg") || extracted.equals("JPEG")) {
        return MediaType.IMAGE_JPEG_VALUE;
    }
    if (extracted.equals("png") || extracted.equals("PNG")) {
        return MediaType.IMAGE_PNG_VALUE;
    }
    throw new IllegalRequestException("확장자가 jpeg 또는 png가 아닙니다.");
}

파일의 확장자에 따라 MediaType을 반환하는 메서드

추후에 API로 이미지를 반환할 때 파일에 붙은 확장자에 따라 Http response의 header에 MediaType을 정해줘야 할 때 사용

 

 

'프로젝트 > PongGame' 카테고리의 다른 글

EntityListeners  (0) 2022.04.28
LoginAccountIdArgumentResolver  (0) 2022.04.28
Spring Security, JWT, 인증, 인가  (5) 2022.04.18
Account 생성  (0) 2022.04.14
build.gradle, application.yml  (0) 2022.04.13

댓글