반응형
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
반응형
'iOS > 코드조각' 카테고리의 다른 글
[iOS, Swift] TableView의 특정 셀 가져오기(indexPath) (0) | 2023.03.01 |
---|---|
[iOS, Swift] 이미지뷰에 이미지 넣기(인터넷 url 주소) (0) | 2023.02.28 |
[iOS, Swift] UIMenu 기본적인 예제 (0) | 2023.02.26 |
[iOS, Swift] 라디오버튼 구현하기 (0) | 2023.02.25 |
[iOS, Swift] 체크박스 구현하기 (0) | 2023.02.24 |