[swift] 파일 업로드하기

파일 업로드는 애플리케이션에서 사용자가 파일을 선택하고 해당 파일을 서버로 전송하는 작업입니다. Swift를 사용하여 파일을 업로드하기 위해 다음과 같은 단계를 따를 수 있습니다.

1. 파일 선택하기

먼저, 사용자가 업로드할 파일을 선택해야 합니다. 이를 위해 iOS에서는 UIImagePickerController를 사용할 수 있습니다. 아래의 코드는 이미지를 선택하는 예제입니다.

import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    let imagePicker = UIImagePickerController()

    override func viewDidLoad() {
        super.viewDidLoad()
        imagePicker.delegate = self
    }

    @IBAction func selectImageTapped(_ sender: UIButton) {
        imagePicker.sourceType = .photoLibrary
        imagePicker.allowsEditing = false
        present(imagePicker, animated: true, completion: nil)
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let selectedImage = info[.originalImage] as? UIImage {
            // 선택한 이미지를 서버로 업로드하는 메서드 호출
            uploadImage(selectedImage)
        }

        dismiss(animated: true, completion: nil)
    }
}

2. 파일 업로드하기

선택된 파일을 서버로 업로드하기 위해서는 URLSession을 사용합니다. 다음은 파일을 업로드하는 예제 코드입니다.

func uploadImage(_ image: UIImage) {
    guard let url = URL(string: "https://example.com/upload") else {
        return
    }

    let boundary = "Boundary-\(UUID().uuidString)"

    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

    let body = NSMutableData()

    // 이미지 데이터 추가
    if let imageData = image.jpegData(compressionQuality: 0.5) {
        body.appendString("--\(boundary)\r\n")
        body.appendString("Content-Disposition: form-data; name=\"file\"; filename=\"image.jpg\"\r\n")
        body.appendString("Content-Type: image/jpeg\r\n\r\n")
        body.append(imageData)
        body.appendString("\r\n")
    }

    // POST 요청 보내기
    request.httpBody = body as Data

    let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
        if let error = error {
            print("Error: \(error)")
            return
        }

        // 서버 응답 처리
        if let httpResponse = response as? HTTPURLResponse {
            if httpResponse.statusCode == 200 {
                // 파일 업로드 성공
                print("파일 업로드 성공")
            }
        }
    }

    task.resume()
}

위의 예제 코드에서는 imageDatafile이라는 이름으로 서버로 전송하고 있습니다. 필요에 따라 이름이나 파일 타입을 변경할 수 있습니다.

결론

Swift를 사용하여 파일 업로드 기능을 구현하는 방법에 대해 알아보았습니다. UIImagePickerController로 사용자에게 파일 선택을 받고, URLSession을 사용하여 서버로 파일을 업로드할 수 있습니다. 이를 기반으로 애플리케이션에 파일 업로드 기능을 추가해보세요.

참고 자료