package umc.spring.file.controller; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import umc.spring.file.service.AmazonS3Service; import umc.spring.file.service.S3Service; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; @RestController @RequiredArgsConstructor @RequestMapping("/api/file") public class FileController { private final AmazonS3Service amazon3SService; @PostMapping("/uploads") public ResponseEntity<Object> uploadFiles( @RequestParam(value = "uploadFilePath") String uploadFilePath, @RequestPart(value = "files") List<MultipartFile> multipartFiles) { return ResponseEntity .status(HttpStatus.OK) .body(amazon3SService.uploadFiles(uploadFilePath, multipartFiles)); } @DeleteMapping("/delete") public ResponseEntity<Object> deleteFile( @RequestParam(value = "uploadFilePath") String uploadFilePath, @RequestParam(value = "uuidFileName") String uuidFileName) { return ResponseEntity .status(HttpStatus.OK) .body(amazon3SService.deleteFile(uploadFilePath, uuidFileName)); } @GetMapping("/get") public void getFile(HttpServletResponse response, @RequestParam String uploadFilePath, @RequestParam String uuidFileName) { try { InputStream inputStream = amazon3SService.getFile(uploadFilePath, uuidFileName); if (inputStream != null) { byte[] buffer = new byte[4048]; int bytesRead; response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); try (OutputStream outStream = response.getOutputStream()) { while ((bytesRead = inputStream.read(buffer)) != -1) { outStream.write(buffer, 0, bytesRead); } } } else { response.setStatus(HttpServletResponse.SC_NOT_FOUND); } } catch (Exception e) { response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } } }