[swift] Swift로 파일 업로드 진행상황 보기

파일 업로드 과정에서 실시간으로 진행상황을 표시하는 것은 사용자에게 직관적인 경험을 제공할 수 있는 중요한 기능입니다. 이번 글에서는 Swift 언어를 사용하여 파일 업로드 진행상황을 표시하는 방법을 알아보겠습니다.

1. URLSession을 사용하여 파일 업로드하기

먼저, 파일을 업로드하기 위해서 URLSession을 사용해야 합니다. URLSession을 사용하여 파일 업로드를 수행하는 코드는 다음과 같습니다.

func uploadFile(fileURL: URL, uploadURL: URL, progressHandler: @escaping (Double) -> Void, completionHandler: @escaping (Error?) -> Void) {
    let fileData = try! Data(contentsOf: fileURL)
    
    var request = URLRequest(url: uploadURL)
    request.httpMethod = "POST"
    
    let uploadTask = URLSession.shared.uploadTask(with: request, from: fileData) { (data, response, error) in
        if let error = error {
            completionHandler(error)
            return
        }
        
        // Handle response
        // ...
        
        completionHandler(nil)
    }
    
    uploadTask.progress.observe(\.fractionCompleted) { progress, _ in
        progressHandler(progress.fractionCompleted)
    }

    uploadTask.resume()
}

위의 코드에서 uploadFile 함수는 파일의 URL과 업로드 URL을 매개변수로 받아 파일을 업로드합니다. 업로드 진행상황은 progressHandler 클로저를 통해 실시간으로 전달됩니다. 업로드가 완료되면 completionHandler 클로저가 호출되며, 에러 여부에 따라 처리됩니다.

2. 업로드 진행상황 표시하기

업로드 진행상황 표시는 주로 UI 상에 프로그레스 바를 사용하여 표현됩니다. 예를 들어, UIProgressView를 사용하여 진행상황을 표시할 수 있습니다.

let progressView = UIProgressView(progressViewStyle: .default)
progressView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(progressView)

NSLayoutConstraint.activate([
    progressView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
    progressView.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])

let fileURL = Bundle.main.url(forResource: "file", withExtension: "txt")!
let uploadURL = URL(string: "http://example.com/upload")!

uploadFile(fileURL: fileURL, uploadURL: uploadURL, progressHandler: { progress in
    DispatchQueue.main.async {
        progressView.progress = Float(progress)
    }
}) { error in
    if let error = error {
        print("Upload error: \(error)")
    } else {
        print("Upload complete")
    }
}

위의 코드는 UIProgressView를 사용하여 업로드 진행상황을 표시하는 예시입니다. uploadFile 함수를 호출하면서 progressHandler 클로저 내에서 progressView.progress 값을 업데이트하여 프로그레스 바를 실시간으로 표시합니다.

3. 결론

Swift 언어를 사용하여 파일 업로드 진행상황을 보는 방법에 대해 알아보았습니다. URLSession을 사용하여 업로드를 수행하고, 실시간으로 진행상황을 업데이트하는 UI 요소를 추가하는 것이 핵심입니다. 업로드 진행상황을 표시함으로써 사용자에게 높은 수준의 편의성을 제공할 수 있습니다.

참고 문서: