[spring] 파일 다운로드 컨트롤러 샘플 (file download, ResponseEntity)

By | 1월 5, 2024

환경

  • spring 4.3.25

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import java.nio.file.Files;
...

@Controller
public class FileController {

    @GetMapping("/download")
    public ResponseEntity<byte[]> download(HttpServletRequest request, Model model){
        // TODO: 필요할 경우 여기에 권한 검증 로직 추가

        // 아래의 값들은 DB조회 등을 통해 가져온다고 가정
        String fileFullPath = "blabla~"; // file physical full path
        String oriFileName = "blabla~"; // 원본 파일명

        File file = new File(fileFullPath);
        if(!file.exists()){
            throw new RuntimeException("파일이 존재하지 않습니다.");
        }

        try{
            byte[] fileBytes = Files.readAllBytes(file.toPath());
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            // 파일명 charset 변환을 하지 않으면 한글 파일명 파일 다운로드시 오류 발생
            headers.setContentDispositionFormData("attachment", new String(oriFileName.getBytes("UTF-8"), "ISO-8859-1"));
            return new ResponseEntity<>(fileBytes, headers, HttpStatus.OK);

        }catch(IOException e){
            log.error("", e);
        }

        return null;
    }
}
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments