투케이2K

136. (kotlin/코틀린) [유틸 파일] urlFileExtensionName : URL 주소 파일 확장자 포함 확인 실시 본문

Kotlin

136. (kotlin/코틀린) [유틸 파일] urlFileExtensionName : URL 주소 파일 확장자 포함 확인 실시

투케이2K 2022. 12. 27. 20:50

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

        // TODO [SEARCH FAST] : [RETURN] urlFileExtensionName : URL 주소 파일 확장자 포함 확인 실시
        fun urlFileExtensionName(data: String): String {

            /**
             * // -----------------------------------------
             * [urlFileExtensionName 메소드 설명]
             * // -----------------------------------------
             * 1. url 형식 주소에서 파일 확장자가 포함되었는지 확인
             * // -----------------------------------------
             * 2. 호출 방식 :
             *
             * C_Util.urlFileExtensionName("http://img.championat.com/myImage.jpg")
             *
             * C_Util.urlFileExtensionName("http://img.championat.com/news/big/l/c/ujejn-runi_1439911080563855663.jpg")
             *
             * C_Util.urlFileExtensionName("http://img.championat.com/static?name=twok&file=myImage.jpg")
             *
             * // -----------------------------------------
             * 3. 리턴 데이터 : 파일 확장자 포함하는 주소인 경우 확장자 명 리턴 / 아니면 null 리턴
             *
             *  jpg / null
             * // -----------------------------------------
             * 4. 참고 [1] : html a 태그 소스 코드
             *
             * <a href='f:http://img.championat.com/news/big/l/c/ujejn-runi_1439911080563855663.jpg' download="file"> 파일다운로드 </a>
             * // -----------------------------------------
             * 5. 참고 [2] : 필수 호출 방식
             *
             * a 태그 href 를 사용해 호출 할 경우 쿼리스트링 형태로 들어오면 안되고, 반드시 [주소/img.jpg] 처럼 경로 설정이 되어야함
             * // -----------------------------------------
             */


            // [리턴 변수 선언 실시]
            var result: String = ""
            var debug = ""


            // [문자열 데이터 널 판단 수행 실시]
            try {
                if (C_Util.stringNotNull(data) == true && data.startsWith("http") == true) { // [널이 아닌 경우]

                    // [파일 확장자 검사 수행 실시]
                    val mimeTypeMap = MimeTypeMap.getSingleton()
                    val extension = MimeTypeMap.getFileExtensionFromUrl(data.trim()).toString() // [jpg]
                    val mimeType = mimeTypeMap.getMimeTypeFromExtension(extension).toString() // [image/jpeg]

                    // [리턴 변수에 삽입 실시]
                    result = extension


                    // [파일 확장자명 종료 확인]
                    if (C_Util.stringNotNull(result) == true) { // [널 값이 아님 : 정상 확장자 포함]

                        // [디버그 삽입]
                        debug = "1"
                    }
                    else { // [널 인 경우]

                        // [디버그 삽입]
                        debug = "2"

                        val fileName = data.substring(data.trim().lastIndexOf('/') + 1)
                        val fileExt = MimeTypeMap.getFileExtensionFromUrl(fileName.trim()).toString() // [jpg]

                        // [리턴 변수에 삽입 실시]
                        result = fileExt
                    }


                    // [쿼리 스트링에서 파일 확장자 검사 확인]
                    if (C_Util.stringNotNull(result) == true) { // [널 값이 아님 : 정상 확장자 포함]
                    }
                    else { // [널 인 경우]

                        val uri: Uri = Uri.parse(data.trim())
                        val host: String = uri.getHost().toString() // [호스트]
                        val endCheck = host + "?" // [마지막 종료 형식 확인 위함 : 스키마 데이터 널 체크]

                        if (uri.getQueryParameterNames() != null && uri.getQueryParameterNames().size > 0
                            && data.trim().endsWith(endCheck.trim()) == false) { // KEY 값이 하나라도 포함된 경우

                            // [배열 순회하면서 파일 확장자 여부 값 확인 실시]
                            val keyList = ArrayList(uri.getQueryParameterNames())
                            for (i in 0 until keyList.size) {

                                // [파일 이름 확인]
                                val fileExt = MimeTypeMap.getFileExtensionFromUrl(uri.getQueryParameter(keyList.get(i).toString())).toString() // [jpg]

                                // [리턴 변수에 삽입 실시]
                                result = fileExt
                            }

                            // [디버그 삽입]
                            debug = "3"
                        }
                        else {
                            // [디버그 삽입]
                            debug = "4"

                            // [리턴 변수에 삽입 실시]
                            result = ""
                        }
                    }
                }
            } catch (e: Exception) {
                e.printStackTrace()
            }


            // [로그 출력 실시]
            ///*
            Log.i("---","---")
            Log.d("//===========//","================================================")
            Log.i("","\n"+"[C_Util >> urlFileExtensionName() :: URL 주소 파일 확장자 포함 확인 실시]")
            Log.i("","\n"+"--------------------------------")
            Log.i("","\n"+"[INPUT :: "+data+"]")
            Log.i("","\n"+"--------------------------------")
            Log.i("","\n"+"[DEBUG :: "+debug+"]")
            Log.i("","\n"+"--------------------------------")
            Log.i("","\n"+"[RETURN :: "+result+"]")
            Log.d("//===========//","================================================")
            Log.i("---","---")
            // */


            // [리턴 결과 반환 실시]
            return result
        }
 

[결과 출력]


반응형
Comments