domain <image class>
import lombok.AllArgsConstrutor
import lombok.Builder
import lombok.Data
import lombok.NoArgsConstructor
@Builder
@AllArgsConstrutor
@NoArgsConstructor
@Data
@Entity
public class Image{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private Stirng caption;
private String postImageUrl; //사진을 전송받아서 서버에 특정 폴더에 저장
// DB에 그 저장된 경로를 insert
@JoinColumn(name = "userId") // DB에 저장되는 foreign key 이름
@OneToOne
private User user; // 1명의 유저는 프로필에 하나의 이미지만 등록할 수 있도록 설정
private LocalDateTime createDate;
@PrePersist
public void createDate(){
this.createDate = LocalDateTime.now();
}
}
Repository <ImageRepository>
public interface ImageRepository extends JpaRepository<Image, Integer> {
}
Controller <ImageController>
@RequiredArgsConstructor
@Controller
public class ImageController {
private final ImageService imageService;
@GetMapping({"/","/image/story"})
public String story(){
}
@GetMapping("/image/popular")
public String popular(){
}
@GetMapping("/image/upload")
public String upload(){
}
@PostMapping("/image")
public String imageupload(ImageUploadDto imageUploadDto, @CurrentUser User user){
imageService.사진업로드(imageUploadDto, user);
}
}
DTO<imageUploadDto>
import lombok.Data;
@Data
public class ImageUploadDto {
private MultiPartFile file;
Private String caption;
}
Service <ImageService>
import org.springframework.stereotype.Service;
import lombok.RequiredArgsContructor;
@RequiredArgsContructor
@Service
public class ImageService {
private final ImageRepository imageRepository;
@Value("{file.path}") //application.yml의 파일 업로드 경로
private String UploadFolder;
public void 사진업로드(ImageUploadDto imageUploadDto, User user){
UUID uuid = UUID.randomUUID(); //uuid
Stirng imageFileName = uuid + "_" +imageUploadDto.getFile().getOriginalFilename(); //1.jpg
Path imageFilePath = Paths.get(UploadFolder + imageFileName)
// 통신, I/O -> 예외가 발생할 수 있다.
try{
Files.write(imageFilePath, imageUploadDto.getFile().getBytes());
} catch(Exception e){
e,printStackTrace();
}
}
}
application.yml
servlet:
multipart:
enable: true
max-file-size: 2MB
file:
path: c:/workspace/springbootwork/upload/
Spring Boot AWS S3연동
https://victorydntmd.tistory.com/334
postman으로 파일 전송
https://elfinlas.github.io/2019/01/16/postman-insert-img/
'java spring' 카테고리의 다른 글
자바 오버라이딩 오버로딩 (0) | 2021.12.16 |
---|---|
자바의 클래스 멤버 변수 초기화 순서 (0) | 2021.12.16 |
spring boot JWT 실습(1) (0) | 2021.07.31 |
Spring boot Exception 처리 (0) | 2021.07.30 |
DAO, DTO, Service (0) | 2021.07.29 |