import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.core.io.PathResource;
import org.springframework.core.io.Resource;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Path;
import java.nio.file.Paths;
@RestController
@RequestMapping("/api/files")
public class FileDownloadController {
@Operation(summary = "파일 다운로드", description = "서버에서 지정된 파일을 다운로드합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "파일 다운로드 성공"),
@ApiResponse(responseCode = "404", description = "파일을 찾을 수 없음")
})
@GetMapping("/download")
public void downloadFile(@RequestParam String fileName, HttpServletResponse response) throws IOException {
// 파일 경로 설정 ( 예: 프로젝트 내 저장 폴더 - /tmp/abc.jpg )
Path filePath = Paths.get("files", fileName);
Resource resource = new PathResource(filePath.toAbsolutePath().toString());
if (!resource.exists()) {
response.sendError(HttpServletResponse.SC_NOT_FOUND, "파일을 찾을 수 없습니다.");
return;
}
// 응답 헤더 설정 (Swagger에서 파일 다운로드 가능하도록)
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
response.setHeader("Content-Type", "application/octet-stream");
// 파일을 스트림을 통해 클라이언트로 전송
try (InputStream inputStream = resource.getInputStream();
OutputStream outputStream = response.getOutputStream()) {
inputStream.transferTo(outputStream); // Java 9+
}
}
}
|