api 통신을 하던 도중! 이미지 파일을 body에 post해야 하는 일이 생겼다!
이 중에서 나는 multipart/form-data에 대해 알아볼 것이다.
Body - form-data에 file을 선택주고 value 값을 누르면 다음과 같이 뜰 것이다.
이미지를 선택한 후 업로드 하면!
이제 send를 누르면!
extension EditProfileViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
/// Image picker
func openImagePicker() {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .photoLibrary
imagePicker.allowsEditing = true
present(imagePicker, animated: true, completion: nil)
}
/// Camera picker
func openCamera() {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .camera
imagePicker.allowsEditing = true
present(imagePicker, animated: true, completion: nil)
}
// UIImagePickerControllerDelegate methods
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let editedImage = info[.editedImage] as? UIImage {
uploadImageToServer(image: editedImage)
} else if let originalImage = info[.originalImage] as? UIImage {
uploadImageToServer(image: originalImage)
}
picker.dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true, completion: nil)
}
}
func uploadImageToServer(image: UIImage) {
let uploadURL = "url"
guard let imageData = image.jpegData(compressionQuality: 1.0) else {
print("Failed to convert image to data.")
return
}
var header: HTTPHeaders = ["Content-Type": "multipart/form-data"]
AF.upload(
multipartFormData: { multipartFormData in
multipartFormData.append(imageData, withName: "file", fileName: "profileImg.jpg", mimeType: "image/jpeg")
// multipartFormData.append(Data, withName: "key")
},
to: uploadURL,
method: .post,
headers: header)
.response { response in
// Handling after upload completion
debugPrint(response)
}
}
이렇게 하면 success 200이 뜨는 걸 확인할 수 있다~~!