diff --git a/README.md b/README.md index 3cc0482..8eb8d61 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,9 @@
## 4. 시스템 아키텍처 -아키텍쳐 +아키텍쳐 + +

diff --git a/src/backend/Eyesee/src/main/java/com/fortune/eyesee/controller/VideoController.java b/src/backend/Eyesee/src/main/java/com/fortune/eyesee/controller/VideoController.java index 971735b..13d1d8c 100644 --- a/src/backend/Eyesee/src/main/java/com/fortune/eyesee/controller/VideoController.java +++ b/src/backend/Eyesee/src/main/java/com/fortune/eyesee/controller/VideoController.java @@ -31,27 +31,29 @@ public ResponseEntity uploadVideo( @RequestParam("endOffset") String endOffset, // ISO 8601 형식 문자열 @RequestPart("video") MultipartFile videoFile) { try { - System.out.println("컨트롤러 호출됨 - userId: " + userId); - System.out.println("파일 크기: " + videoFile.getSize()); + log.info("컨트롤러 호출됨 - userId: {}, 파일 크기: {}", userId, videoFile.getSize()); // ISO 8601 문자열을 LocalDateTime으로 변환 DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME; // ISO 8601 형식 지원 LocalDateTime startDateTime = LocalDateTime.parse(startOffset, formatter); LocalDateTime endDateTime = LocalDateTime.parse(endOffset, formatter); - System.out.println("시작 시간: " + startDateTime); - System.out.println("종료 시간: " + endDateTime); + log.info("시작 시간: {}, 종료 시간: {}", startDateTime, endDateTime); String videoUrl = videoService.saveVideo(userId, startDateTime, endDateTime, videoFile); return ResponseEntity.ok(videoUrl); } catch (DateTimeParseException e) { e.printStackTrace(); - log.error("날짜 형식 변환 오류: ", e); + log.error("날짜 형식 변환 오류 - startOffset: {}, endOffset: {}", startOffset, endOffset, e); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("잘못된 날짜 형식입니다."); - } catch (Exception e) { + } catch (IOException e) { e.printStackTrace(); - log.error("Failed to upload video", e); + log.error("비디오 업로드 오류 - 파일명: {}, 파일 크기: {}", videoFile.getOriginalFilename(), videoFile.getSize(), e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to upload video"); + } catch (Exception e) { + e.printStackTrace(); + log.error("예상치 못한 오류 발생", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to upload video"); } } diff --git a/src/backend/Eyesee/src/main/java/com/fortune/eyesee/service/VideoService.java b/src/backend/Eyesee/src/main/java/com/fortune/eyesee/service/VideoService.java index 733f805..f0d3b4d 100644 --- a/src/backend/Eyesee/src/main/java/com/fortune/eyesee/service/VideoService.java +++ b/src/backend/Eyesee/src/main/java/com/fortune/eyesee/service/VideoService.java @@ -1,17 +1,21 @@ package com.fortune.eyesee.service; import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.model.CannedAccessControlList; import com.amazonaws.services.s3.model.ObjectMetadata; import com.fortune.eyesee.entity.VideoRecording; import com.fortune.eyesee.repository.VideoRecordingRepository; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.io.InputStream; import java.time.LocalDateTime; import java.util.UUID; +@Slf4j @Service public class VideoService { @@ -27,20 +31,32 @@ public VideoService(AmazonS3 amazonS3, VideoRecordingRepository videoRecordingRe } public String saveVideo(Integer userId, LocalDateTime startOffset, LocalDateTime endOffset, MultipartFile videoFile) throws IOException { - String fileName = generateFileName(userId); + // 파일 이름 생성 + String fileName = generateFileName(userId, videoFile.getOriginalFilename()); String key = "videos/" + userId + "/" + fileName; try { // S3에 업로드 + InputStream fileContent = videoFile.getInputStream(); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType(videoFile.getContentType()); metadata.setContentLength(videoFile.getSize()); - amazonS3.putObject(bucketName, key, videoFile.getInputStream(), metadata); + amazonS3.putObject(bucketName, key, fileContent, metadata); + + // 로그로 업로드하는 파일 정보 출력 + log.info("업로드된 파일: {}", key); + log.info("업로드된 파일 크기: {}", videoFile.getSize()); + log.info("업로드된 파일 타입: {}", videoFile.getContentType()); + log.info("업로드된 파일 이름: {}", videoFile.getOriginalFilename()); + log.info("업로드된 파일 메타데이터: {}", metadata.getContentType()); + log.info("업로드된 파일 메타데이터: {}", metadata.getContentLength()); + + // 업로드된 파일의 URL 생성 String filePath = amazonS3.getUrl(bucketName, key).toString(); - // 비디오 정보를 DB에 저장 + // 비디오 정보 DB에 저장 saveVideoRecording(userId, startOffset, endOffset, filePath); return filePath; @@ -60,8 +76,9 @@ private void saveVideoRecording(Integer userId, LocalDateTime startTime, LocalDa videoRecordingRepository.save(videoRecording); } - - private String generateFileName(Integer userId) { - return userId + "_" + UUID.randomUUID() + ".webm"; + private String generateFileName(Integer userId, String originalFilename) { + // 파일 확장자를 추출하여 파일 이름을 생성 + String fileExtension = originalFilename.substring(originalFilename.lastIndexOf('.')); + return userId + "_" + UUID.randomUUID() + fileExtension; } } \ No newline at end of file