Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…ne-1 into frontend/feature/add-exam
  • Loading branch information
hyeona01 committed Dec 9, 2024
2 parents 38bb52f + 56885ca commit b56efb9
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 14 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,9 @@
<br>

## 4. 시스템 아키텍처
<img width="912" alt="아키텍쳐" src="https://github.com/user-attachments/assets/e12629fb-eb3a-4d20-83ed-51c8aebed1e0">
<img width="912" alt="아키텍쳐" src="https://github.com/user-attachments/assets/56390b53-3205-41f3-bc73-f9bb912a5cb2">




<br><br>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,27 +31,29 @@ public ResponseEntity<String> 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");
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {

Expand All @@ -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;
Expand All @@ -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;
}
}

0 comments on commit b56efb9

Please sign in to comment.