본문 바로가기
컴퓨터/Spring

[SpringBoot] photoBlog 개인 프로젝트_여러 이미지 업로드 구현 (4-1) UUID , FileOutputStream

by 버니케이 2022. 3. 12.
반응형

 

1. service 설계
2. FileService

 

1. service 설계

FileService: 파일을 등록하고 삭제하는 클래스

PostImgService: 이미지를 등록하고 수정하는 클래스

PostService: 글과 이미지 CRUD 를 구현하는 클래스

 

 

2. FileService

package com.example.blog.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

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

@Service
@Slf4j
public class FileService {

    // 파일 업로드
    public String uploadFiles(String uploadPath, String originalFileName, byte[] fileData) throws Exception{

        // 완전 랜덤한 id 값 생성
        UUID uuid = UUID.randomUUID();
        // . 뒤를 잘라버림
        String extention = originalFileName.substring(originalFileName.lastIndexOf("."));

        // 랜덤 id 값 + 파일 확장자
        String saveFileName = uuid.toString() + extention;
        // 파일업로드경로 = 업로드경로/랜덤 id 값.파일 확장자
        String fileUploadFullUrl = uploadPath + "/" + saveFileName;

        // 파일이 저장될 위치와 파일 이름을 파라미터로 넣어서 파일에 쓸 파일 출력 스트림 생성
        FileOutputStream fos = new FileOutputStream(fileUploadFullUrl);
        fos.write(fileData);
        fos.close();

        // saveFileName (랜덤 id 값 + 파일 확장자) 반환
        return saveFileName;
    }

    // 파일 삭제
    public void deleteFile(String filePath) throws Exception{

        // 파일 저장 경로를 이용해서 파일 객체 생성
        File deleteFile = new File(filePath);

        if(deleteFile.exists()){
            deleteFile.delete();
            log.info("파일 삭제 완료");
        }else{
            log.info("파일이 없습니다.");
        }

    }
}

FileService 에는 파일 생성과 삭제 메소드를 선언했다.

주석으로 자잘한 설명을 달았다.

 

추가로 적어놓는 정보들:

 

파일 생성 메소드

UUID 를 이용해서 파일 이름을 만들었다.

UUID: Universally Unique Identifier
서로 다른 개체들을 구별하기 위해서 이름을 부여할 때 사용고유성이 보장되는 id 임

 

substring 함수를 이용해서 원파일이름의 . 뒤를 잘라버렸다.

(aaa.jpg => jpg)

// . 뒤를 잘라버림
String extention = originalFileName.substring(originalFileName.lastIndexOf("."));

 

 

파일 삭제 메소드를 생성해준 이유는

글의 이미지를 수정할 때,

원래 이미지를 삭제한 다음, 그 자리에 다시 이미지를 넣어주게 하기 위해서이다.

이때 사용한 어노테이션과 함수는

@Slf4j
 log.info("파일 삭제 완료");

이 두개인데,

System.out.println(); 처럼 로그를 찍어준다.

 

반응형

댓글