Spring Boot

스프링부트_파일 다운로드

Kabby 2019. 8. 29. 22:12

VideoRestController.java

@GetMapping(value = "/{videoId}/download", produces = MediaType.APPLICATION_JSON_VALUE)

public StreamingResponseBody findVideoFileDownload(@PathVariable(name="videoId") String videoId,HttpServletResponse response) throws FileNotFoundException {

// TODO Auto-generated method stub

return this.videoServiceImpl.findVideoFileDownload(videoId, response);

}

 

VideoService.java

public interface VideoService {

	public StreamingResponseBody findVideoFileDownload(String videoId, HttpServletResponse response) throws FileNotFoundException;
	
	
}

 

VideoLogic.java

public class VideoLogic implements VideoService {

	private VideoRepositoryStore videoRepository;

	public VideoLogic(VideoRepositoryStore videoRepository) {
		this.videoRepository = videoRepository;
	}

	
	@SuppressWarnings("resource")
	@Override
	public StreamingResponseBody findVideoFileDownload(String videoId, HttpServletResponse response) throws FileNotFoundException {
	
		/*
		 * 다운 받을 영상 경로 예 : /Users/jeong/Desktop/video/tea.mp4
		 * 확장자 : mp4
		 * 
		 */

		Video video=this.videoRepository.retrieveVideoById(videoId);
						
		response.setContentType("video/mp4");
		response.setHeader("Content-Disposition", "attachment;filename=" + video.getVideoName() + "." + video.getVideoExtention());

		File targetFile = new File(video.getVideoPath());
		InputStream targetStream =  new DataInputStream(new FileInputStream(targetFile));
		
		return outputStream -> {
			int nRead;
			byte[] data = new byte[4069];
			while ((nRead = targetStream.read(data, 0, data.length)) != -1) {
				outputStream.write(data, 0, nRead);
			}
			
		};
	}

}

 

 

https://gitlab.com/kabby-play-code/msa/toy-project-1/msa-video/back-end