[swift] Swift ObjectMapper를 사용한 파일 업로드 처리 방법은?

파일 업로드는 웹 애플리케이션 개발에서 자주 사용되는 기능 중 하나입니다. Swift에서 파일을 업로드하고 서버로 전송하는 방법을 배우려면 ObjectMapper를 사용하여 JSON 데이터를 매핑하는 방법을 알아야 합니다. 여기서는 Swift ObjectMapper를 사용한 파일 업로드 처리 방법을 소개하겠습니다.

  1. ObjectMapper 설치

먼저, ObjectMapper를 설치해야 합니다. Swift Package Manager를 사용하여 간단하게 설치할 수 있습니다. 프로젝트의 패키지 매니페스트 파일에 다음을 추가하세요.

dependencies: [
    .package(url: "https://github.com/tristanhimmelman/ObjectMapper.git", from: "4.2.0")
]
  1. 모델 클래스 생성

파일 업로드 시에는 업로드할 파일의 정보를 담고 있는 모델 클래스가 필요합니다. 예를 들어, 파일의 이름과 MIME 타입을 저장하는 File 모델 클래스를 생성하세요.

import ObjectMapper

class File: Mappable {
    var name: String?
    var mimeType:String?
    
    required init?(map: Map) {
        
    }
    
    func mapping(map: Map) {
        name <- map["name"]
        mimeType <- map["mimeType"]
    }
}
  1. 파일 업로드 요청 생성

이제 파일 업로드를 위한 URLRequest를 생성해야 합니다. 아래의 코드를 사용하여 파일 경로와 업로드할 서버의 URL을 설정합니다.

import Alamofire

let url = "http://example.com/upload"
let fileURL = URL(fileURLWithPath: "/path/to/file")
let fileName = fileURL.lastPathComponent
let mimeType = "application/octet-stream"

var request = try! URLRequest(url: url, method: .post)
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

Alamofire.upload(multipartFormData: { formData in
    // 파일 데이터 추가
    formData.append(fileURL, withName: "file", fileName: fileName, mimeType: mimeType)
}, with: request, encodingCompletion: { encodingResult in
    switch encodingResult {
    case .success(let upload, _, _):
        upload.responseJSON { response in
            // 업로드 성공 시 처리할 코드
        }
    case .failure(let encodingError):
        // 업로드 실패 시 처리할 코드
    }
})
  1. 업로드 결과 처리

업로드가 성공하면 서버에서 응답을 받게 됩니다. ObjectMapper를 사용하여 JSON 데이터를 매핑하여 필요한 작업을 수행할 수 있습니다. 아래의 코드를 예시로 살펴봅시다.

func handleUploadResponse(data: Data) {
    if let jsonData = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any] {
        if let file = Mapper<File>().map(JSON: jsonData) {
            // 서버에서 받은 데이터를 사용하여 파일 정보를 처리합니다.
            print(file.name)
            print(file.mimeType)
        }
    }
}

이와 같이 Swift ObjectMapper를 사용하여 파일 업로드 처리를 할 수 있습니다. ObjectMapper는 JSON 데이터를 객체로 변환하는 작업을 쉽게 해주는 라이브러리이므로 파일 업로드 외에도 다른 데이터 형식에 대해서도 유용하게 활용할 수 있습니다.