티스토리 뷰
일반적인 Parameter 만 보낼때는 몰랐지만
이미지를 보내는 건 좀 다르게 생겼습니다.
이거는 좀 특이해서 전체 코드를 올리는게 좋을것같아서
전체 코드로 올려드립니다.
Alamofire에 대한 기본적인 이해는 이전 글을 참고해주세요.
2022.12.29 - [iOS개발/Swift 통신] - Swift Alamofire 세부 설정편
기본적으로 이미지를 그냥 보내는게 아니라 Data 타입으로 바꿔서 보낸다고 생각하시면 됩니다.
사용법 (참고해주세요.)
let imageData = image.jpegData(compressionQuality: 1.0)
let fileName = "answer_image"
// 같이 보낼 parameter(Parameter)는 기존과 동일하게 설정해주세요.
// sendUrl 도 마찬가지로 원하시는 URL을 입력해주세요.
NetWorkBase.sendFileData(a_url: sendUrl, fileName: fileName, fileData: imageData!, a_param: parameter){response in
print(response)
}
함수식 (저는 NetWorkBase 라는 class 안에 아래 함수를 선언해서 사용하기때문에 위처럼 사용하는 겁니다.)
//MARK: 파일전송은 따로 제작
public static func sendFileData(a_url: String,fileName: String,fileData: Data,a_param: [String : Any?], completionHandler: @escaping (_ response: [String: Any]) -> ()) {
// Header 는 서버에 맞게 설정해주세요.
let apiHeader: HTTPHeaders = [ "Content-Type" : "multipart/form-data"]
let totalUrl = TEST_URL + a_url
AF.upload(multipartFormData: { multiPart in
for (key, value) in a_param {
if let temp = value as? String {
multiPart.append(temp.data(using: .utf8)!, withName: key)
}
if let temp = value as? Int {
multiPart.append("\(temp)".data(using: .utf8)!, withName: key)
}
if let temp = value as? NSArray {
temp.forEach({ element in
let keyObj = key + "[]"
if let string = element as? String {
multiPart.append(string.data(using: .utf8)!, withName: keyObj)
} else
if let num = element as? Int {
let value = "\(num)"
multiPart.append(value.data(using: .utf8)!, withName: keyObj)
}
})
}
}
multiPart.append(fileData, withName: "file", fileName: "\(fileName).jpg", mimeType: "image/jpeg")
}, to: totalUrl,method: .post,headers: apiHeader).responseData{ response in
switch response.result {
case .success(let data):
do {
let value = try JSONSerialization.jsonObject(with: data , options: .mutableContainers)
print(value)
guard let castingValue = value as? [String: Any] else {return}
completionHandler(castingValue)
}catch {
print(error)
print("get special error")
}
case .failure(let error):
print(error.localizedDescription)
}
}.uploadProgress{progress in
print("percent : \(progress.fractionCompleted)")
}
}
모양이 많이 달라진게 보이시나요?
multipartFormData 를 이용해 Data파일을 보내다 보니
기존 모양이랑은 많이 달라졌습니다.
(기존에는 파라미터를 만들고 바로 보냈다면 여기는 다시 분해해서 일일이 추가해주는 방식?)
물론 이 방법이 최선인지는 좀더 알아보는 편이 좋겠지만
저의 경우에는 한참을 해메다 이런 식으로 했습니다.
저처럼 해메시는 분들을 위해 올려봅니다.
* 참고로 이번 글은 다른 분들이 올리셨던 코드들을 참고해서 제작되었습니다.
그럼 오늘도 파이팅입니다.
'iOS개발 > Swift 통신' 카테고리의 다른 글
Swift Local Push Notification 이해하기 (0) | 2023.05.24 |
---|---|
Swift Synchronous URL loading of 보라색 경고 (Xcode 14 이상) (0) | 2023.05.23 |
Swift Alamofire 세부 설정편 (0) | 2022.12.29 |
Swift Alamofire 간단 서버에서 값 가져오기 기본편 (0) | 2022.12.27 |
Swift ObjectMapper 사용해보기 (0) | 2022.12.26 |
댓글