투케이2K

132. (ios/swift) URLSession 사용해 http get 방식 이미지 주소 호출 및 이미지 뷰에 이미지 (image) 표시 실시 본문

IOS

132. (ios/swift) URLSession 사용해 http get 방식 이미지 주소 호출 및 이미지 뷰에 이미지 (image) 표시 실시

투케이2K 2022. 3. 19. 20:00
반응형

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[소스 코드]

    // MARK: - [URL Session Get 사진 데이터 다운로드]
    func requestGet() {
        
        
        // MARK: [http 통신 수행 필요 info plist 권한]
        // MARK: [App Transport Security Settings >> Allow Arbitrary Loads >> YES]
        
        
        // [URL 지정 및 파라미터 값 지정 실시]
        var urlComponents = URLComponents(string: "https://smart.test.ac.kr/profile_image?")
        let paramQuery_1 = URLQueryItem(name: "u", value: "12345678")
        urlComponents?.queryItems?.append(paramQuery_1) // 파라미터 지정
        
        
        // [http 통신 타입 및 헤더 지정 실시]
        var requestURL = URLRequest(url: (urlComponents?.url)!)
        requestURL.httpMethod = "GET" // GET
        requestURL.addValue("application/x-www-form-urlencoded; charset=utf-8;", forHTTPHeaderField: "Content-Type") // GET

        
        // [http 요쳥을 위한 URLSessionDataTask 생성]
        print("")
        print("===============================")
        print("[A_Image >> requestGet :: http get 요청 실시]")
        print("url : ", requestURL)
        print("===============================")
        print("")
        let dataTask = URLSession.shared.dataTask(with: requestURL) { (data, response, error) in

            // [error가 존재하면 종료]
            guard error == nil else {
                print("")
                print("===============================")
                print("[A_Image >> requestGet :: http get 요청 실패]")
                print("fail :: ", error?.localizedDescription ?? "")
                print("===============================")
                print("")
                return
            }

            // [status 코드 체크 실시]
            let successsRange = 200..<300
            guard let statusCode = (response as? HTTPURLResponse)?.statusCode, successsRange.contains(statusCode)
            else {
                print("")
                print("===============================")
                print("[A_Image >> requestGet :: http get 요청 에러]")
                print("error :: ", (response as? HTTPURLResponse)?.statusCode ?? 0)
                print("msg :: ", (response as? HTTPURLResponse)?.description ?? "")
                print("===============================")
                print("")
                return
            }

            // [response 데이터 획득]
            let resultCode = (response as? HTTPURLResponse)?.statusCode ?? 0
            let resultLen = data! // 데이터 길이
            let mimeType = response?.mimeType // 응답 데이터 타입 확인
            
            
            // [응답 데이터 타입이 이미지 파일 인지 확인 실시]
            if ((mimeType?.lowercased().contains("image")) != nil) {
                print("")
                print("===============================")
                print("[A_Image >> requestGet :: http get 요청 성공]")
                print("resultCode :: ", resultCode)
                print("resultLen :: ", resultLen)
                print("mimeType :: ", mimeType ?? "")
                print("===============================")
                print("")
                
                
                DispatchQueue.main.async {
                    // [응답 데이터를 이미지로 받음]
                    let image = UIImage(data: data!)
                    
                    // [이미지 뷰에 표시 수행 실시]
                    self.imageView.image = image
                }
            }
            else {
                print("")
                print("===============================")
                print("[A_Image >> requestGet :: http get 요청 에러]")
                print("resultCode :: ", resultCode)
                print("error :: ", "파일 형식이 이미지 파일이 아닙니다")
                print("mimeType :: ", mimeType ?? "")
                print("===============================")
                print("")
            }
        }

        // network 통신 실행
        dataTask.resume()
    }
 

[결과 출력]


 

반응형
Comments