투케이2K

67. (spring/스프링) Response HttpHeaders setContentType 설정 get 요청 및 파일 다운로드 (file download) 실시 본문

Spring

67. (spring/스프링) Response HttpHeaders setContentType 설정 get 요청 및 파일 다운로드 (file download) 실시

투케이2K 2022. 8. 31. 14:33

[개발 환경 설정]

개발 툴 : inteli j

개발 언어 : spring

 

[Controller : 소스 코드]

    // TODO [SEARCH FAST] : [TEST_IMG_DOWN] : [테스트 이미지 다운]
    @GetMapping("/TEST_IMG_DOWN")
    public HttpEntity<byte[]> TEST_IMG_DOWN(@RequestParam Map<String, Object> param) {
        System.out.println("\n");
        System.out.println("================================================");
        System.out.println("[CLASS] : " + String.valueOf("TOWK_CLASS"));
        System.out.println("[METHOD] : " + String.valueOf("TEST_IMG_DOWN"));
        System.out.println("================================================");
        System.out.println("\n");

        /**
         * // -----------------------------------------
         * [호출 방법]
         * // -----------------------------------------
         * 1. 호출 방식 : GET
         * // -----------------------------------------
         * 2. 호출 방법 :
         *
         *  [주소 정의] : http://localhost:7000/TEST_IMG_DOWN
         * // -----------------------------------------
         * */


        // [로직 처리 수행 실시]
        InputStream fileInputStream = null;
        try {

            // [1]. 파일 명칭 이름 설정 실시
            String fileName = "test.png";


            // [2]. 로컬 PC 에 저장된 이미지 파일 불러오기
            String filePath = "C:\\Users\\twok\\Desktop\\black_people_icon.png";


            // [3]. FileInputStream 을 사용해 파일 읽음
            fileInputStream = new FileInputStream(filePath);


            // [4]. File to Byte 변환 실시
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            int len = fileInputStream.read();
            while (len != -1) {
                byteArrayOutputStream.write(len);
                len = fileInputStream.read();
            }

            byte [] fileData = byteArrayOutputStream.toByteArray();
            System.out.println("\n");
            System.out.println("================================================");
            System.out.println("[CLASS] : " + String.valueOf("TOWK_CLASS"));
            System.out.println("[fileData] : [LENGTH] : " + String.valueOf(fileData.length));
            System.out.println("================================================");
            System.out.println("\n");


            // [5]. 헤더 설정 실시
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.IMAGE_PNG);
            headers.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename="+fileName);
            headers.setContentLength(fileData.length);


            // [6]. 리턴 반환 실시
            fileInputStream.close();
            return new HttpEntity<byte[]>(fileData, headers);
        }
        catch (Exception e){
            e.printStackTrace();

            try {
                if (fileInputStream != null){
                    fileInputStream.close();
                }
            }
            catch (IOException ex){}

        }

        return null;
    }
 

[결과 출력]


 

반응형
Comments