728x90
반응형

 

앱에서 서버로 ImageData를 Base64 Encode 해서 보내는데 "+" 부분이 " " 으로 변환되는 이슈가 있습니다.

 

해당 HTTP 통신할 떄 발생합니다.

 

이런 문제를 해결하기 위한 간단한 2가지 방법을 알아보겠습니다.

 

 

 

 

1. 서버와 약속된 문자열로 변환

클라이언트에서 특정 문자를 Url Safe 한 문자로 변환을 하여 서버에게 전송하면 서버에서 다시 원상태로 문자를 변환하는 작업입니다.

 

아래는 Swift 코드 이지만 서버도 비슷하게 처리 하면 됩니다.

 

toggleBase64URLSafe(on: true) 했을때 서버로 요청하는 url로 변환하고 false 는 url을 원상태로 변환합니다.

    func toggleBase64URLSafe(on: Bool) -> String {
        if on {
            // Make base64 string safe for passing into URL query params
            let base64url = self.replacingOccurrences(of: "/", with: "_")
                .replacingOccurrences(of: "+", with: "-")
                .replacingOccurrences(of: "=", with: "")
            return base64url
        } else {
            // Return to base64 encoding
            var base64 = self.replacingOccurrences(of: "_", with: "/")
                .replacingOccurrences(of: "-", with: "+")
            // Add any necessary padding with `=`
            if base64.count % 4 != 0 {
                base64.append(String(repeating: "=", count: 4 - base64.count % 4))
            }
            return base64
        }
    }

 

 

 

 

2. 특정 문자를 URL Encoding 하기.

서버를 자회사에서 관리한다면 약속된 문자열로 변환해도 상관없지만 타회사에 요청하는 경우엔 약속을 할 수 없습니다.

 

간단하게 아래와같이 특정부분을 URL Encoding 해서 보내면 문제는 사라집니다.

 

아래 코드로 HTTP 통신을 한다면 "+" 문자가 " "로 변환되어 집니다.

import Foundation

extension UIImage {
    var base64String: String {
        let imageData: NSData = self.jpegData(compressionQuality: 0.1)! as NSData
        let base64url = imageData.base64EncodedString(options: [.endLineWithCarriageReturn, .endLineWithLineFeed])
        return base64url
    }
}

 

 

 

 

하지만 아래 코드처럼 특정 문자를 URL Encoding 해서 보내면 서버에서도 문제없이 처리가 됩니다.

 

toReplace함수는 replacingOccurrences(of: of, with: with) 와 동일합니다.

import Foundation

extension UIImage {
    var base64String: String {
        let imageData: NSData = self.jpegData(compressionQuality: 0.1)! as NSData
        let base64url = imageData.base64EncodedString(options: [.endLineWithCarriageReturn, .endLineWithLineFeed])
        return base64url.toReplace("+", "%2B")
    }
}

 

 

728x90
반응형
728x90
반응형

형상관리를 하지만 IOS를 개발할때 파일의 충돌이 잘 발생합니다.

 

git ignore 설정을 하지 않는다면 다른 팀원과 소스 관리가 거의 불가능할 것입니다.

 

그럼에도 불구하고 Cocoapod 관련해서 오류가 발생한다면 재설치를 진행해야 정상 Build 가 됩니다.

 

 

 

 

터미널로 프로젝트 경로에 진입합니다.

 

Podfile. xcworkspace, Pods 폴더를 삭제하고 pod을 재설치 합니다.

sudo rm Podfile.lock 
sudo rm -r [프로젝트명].xcworkspace 
sudo rm -r Pods 
pod install

 

 

 

 

Proejct Clean 이나 Build 를 해서 되지 않는다면 위와 같은 방법으로 진행하시는걸 추천드립니다.

 

728x90
반응형

+ Recent posts