임정민 ‐ multipart form‐data - boostcampwm2023/iOS04-HeatPick GitHub Wiki

🖼️ 배경

  • #238

🫠 트러블

  • 사진과 내용을 함께 보내기 위해 multipart/form-data 사용해야 했음
  • swift가 이를 지원하지 않아 직접 body를 만들어야하는 문제

🏃🏻 시도했던 방법

  • 표준에 맞춰 body를 직접 만들 수 있도록 Multipart.makeData method 구현
  • json body data와 달리, 최상단의 value 값은 ""가 그대로 들어가는 문제가 있었음

✅ 솔루션

public func makeData(boundary: String) -> Data {
        let lineBreak = "\r\n"
        var body = Data()
        
        let parameters = data.dataParameters()
        for (key, value) in parameters {
            guard let stringValue = String(data: value, encoding: .utf8) else { continue }
            body.append("--\(boundary + lineBreak)")
            body.append("Content-Disposition: form-data; name=\"\(key)\"\(lineBreak + lineBreak)")
            body.append(stringValue)
            body.append(lineBreak)
        }
        
        for media in mediaList {
            body.append("--\(boundary + lineBreak)")
            body.append("Content-Disposition: form-data; name=\"\(media.key)\"; filename=\"\(media.filename)\"\(lineBreak)")
            body.append("Content-Type: \(media.mimeType + lineBreak + lineBreak)")
            body.append(media.data)
            body.append(lineBreak)
        }
        
        body.append("--\(boundary)--\(lineBreak)")
        
        return body
    }

🔗 참고자료