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