[swift] Alamofire를 사용하여 서버에 대용량 파일 업로드하기

안녕하세요! 이번에는 Alamofire를 사용하여 대용량 파일을 서버에 업로드하는 방법에 대해 알아보겠습니다. Alamofire는 Swift에서 HTTP 네트워킹을 쉽게 처리할 수 있는 많은 기능을 제공하는 라이브러리입니다.

1. Alamofire 설치하기

먼저, Alamofire를 프로젝트에 추가하기 위해 CocoaPods를 사용하겠습니다. Podfile에 다음과 같이 Alamofire를 추가해주세요.

pod 'Alamofire'

그리고 pod install 명령을 실행하여 Alamofire를 프로젝트에 설치하세요.

2. 서버에 파일 업로드하기

서버에 대용량 파일을 업로드하기 위해 URLRequestConvertible 프로토콜을 채택하는 커스텀 업로드 요청을 생성하겠습니다.

import Alamofire

struct CustomUploadRequest: URLRequestConvertible {
    let url: URL
    let fileURL: URL
    
    func asURLRequest() throws -> URLRequest {
        var request = try URLRequest(url: url, method: .post)
        request.setValue("application/octet-stream", forHTTPHeaderField: "Content-Type")
        
        request.httpBody = try Data(contentsOf: fileURL)
        
        return request
    }
}

위 코드는 CustomUploadRequest라는 업로드 요청을 정의한 것입니다. 해당 요청은 urlfileURL 매개변수를 받아와서 HTTP POST 메서드로 서버에 요청을 전송하고, fileURL에 있는 파일을 업로드합니다.

이제 업로드를 수행할 ViewController에서 Alamofire를 사용하여 파일을 서버에 업로드하는 코드를 작성해보겠습니다.

import Alamofire

class UploadViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let fileURL = Bundle.main.url(forResource: "largeFile", withExtension: "txt")!
        let uploadURL = URL(string: "http://example.com/upload")!
        
        let request = CustomUploadRequest(url: uploadURL, fileURL: fileURL)
        
        Alamofire.upload(request)
            .uploadProgress(queue: .main, closure: { progress in
                print("Upload Progress: \(progress.fractionCompleted)")
            })
            .response { response in
                debugPrint(response)
            }
    }
}

위 코드에서 fileURL은 업로드할 대용량 파일의 URL을, uploadURL은 파일을 업로드할 서버의 URL을 지정합니다. CustomUploadRequest를 사용하여 업로드할 파일과 서버의 URL을 전달하여 Alamofire.upload 함수를 호출합니다. 이때 업로드 진행 상황을 알 수 있도록 uploadProgress 클로저를 사용하고, 업로드 완료 후 서버로부터의 응답을 처리하기 위해 response 블록을 구현했습니다.

이제 대용량 파일을 서버에 업로드하는 코드가 준비되었습니다. 프로젝트를 실행하여 업로드를 테스트해보세요!

더 많은 정보를 알고 싶다면, Alamofire 공식 문서를 참조해주세요. Alamofire GitHub

이상으로 Alamofire를 사용하여 서버에 대용량 파일을 업로드하는 방법을 알아보았습니다. 감사합니다!