반응형
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(); 처럼 로그를 찍어준다.
반응형
'컴퓨터 > Spring' 카테고리의 다른 글
[SpringBoot] photoBlog 개인 프로젝트_여러 이미지 업로드 구현 (4-2) PostImgService (0) | 2022.03.23 |
---|---|
[SpringBoot] 레이어드 아키텍쳐 패턴, Controller Service Repository 가 하는 일 (4) | 2022.03.18 |
[SpringBoot] photoBlog 개인 프로젝트_여러 이미지 업로드 구현 (3) 글, 이미지 dto와 view (0) | 2022.03.11 |
[SpringBoot] photoBlog 개인 프로젝트_여러 이미지 업로드 구현 (2) 글, 이미지 entity와 테이블 설계 (2) | 2022.03.10 |
[SpringBoot] photoBlog 개인 프로젝트_이미지 업로드 구현 연습 (1) 계획 (0) | 2022.03.10 |
댓글