iOS/코드조각

[iOS, Swift] 이미지 파일 업로드하기 (alamofire, multipart-data)

검은참깨두유vm 2023. 2. 27. 00:01
반응형

iOS 16.1, Xcode 14.2, Swift 5, UIKit 환경에서 진행했습니다.

 

 

 

alamofire를 사용하여 이미지 파일을 업로드할 때에는 기존에 썼던 AF.request와는 달리 AF.upload 함수를 사용하여야합니다.

먼저 multipart/form-data 형식으로 보내기 위해 header 변수에 Content-Type으로 형식을 설정합니다.

그리고 multipartForm으로 전송하기 위해 upload(multipartFormData: , to: ) 함수를 선택합니다. 

let header = ["Content-Type": "multipart/form-data"]

AF.upload(multipartFormData: { multipartFormData in
    
}, to: url, method: .patch, headers: header)

 

그 후 이미지 데이터 외에 보낼 파라미터가 있다면 multipartFormData에 데이터타입과 key를 입력합니다.

또 image는 data타입으로 수정하여 multipartFormData에 입력합니다.

to 속성에는 url 주소를 넣고 method, header 값을 입력해줍니다.

let header = ["Content-Type": "multipart/form-data"]
let parameter = ["name": "blacksesame"]

AF.upload(multipartFormData: { multipartFormData in
    for (key, value) in parameters {
        multipartFormData.append("\(value)".data(using: .utf8)!, withName: key)
    }
    if let imageData = image?.pngData() {
        multipartFormData.append(imageData, withName: "image", fileName: "image", mimeType: "image/png")
    }
}, to: url, method: .patch, headers: header)

 

그 후에 validate() 함수를 사용해 유효한 값만 통신을 받고,

responseJSON을 통해 JSON 형식으로 값을 받고 통신 이후 처리해야할 코드를 넣으면 완성이다.

 

 

전체코드

let header = ["Content-Type": "multipart/form-data"]
let parameter = ["name": "blacksesame"]

AF.upload(multipartFormData: { multipartFormData in
    for (key, value) in parameters {
        multipartFormData.append("\(value)".data(using: .utf8)!, withName: key)
    }
    if let imageData = image?.pngData() {
        multipartFormData.append(imageData, withName: "image", fileName: "image", mimeType: "image/png")
    }
}, to: url, method: .patch, headers: header)
.validate()
.responseJSON { response in
	// response 받고 처리할 값
}

 

 

 

 

참조

https://github.com/Alamofire/Alamofire

https://github.com/Alamofire/Alamofire/blob/master/Tests/UploadTests.swift#L549-L616

 

반응형