Swift를 사용하여 HTTP 요청을 보내고 파일을 업로드하는 것은 매우 간단한 일입니다. 이번 블로그에서는 URLSession을 사용하여 Swift에서 파일을 업로드하는 방법에 대해 알아보겠습니다.
1. 파일 선택
먼저, 업로드할 파일을 선택해야 합니다. 이 예제에서는 UIImagePickerController를 사용하여 사용자가 앨범에서 사진을 선택할 수 있도록 구성하겠습니다. 다음은 이미지 피커를 구성하는 코드입니다.
func pickImage() {
let imagePicker = UIImagePickerController()
imagePicker.sourceType = .photoLibrary
imagePicker.delegate = self
present(imagePicker, animated: true, completion: nil)
}
2. URLSession을 사용하여 파일 업로드
파일을 선택한 후, URLSession을 사용하여 파일을 업로드할 준비를 해야 합니다. 다음은 업로드할 파일을 서버에 전송하는 함수입니다.
func uploadFile(with fileURL: URL) {
let requestURL = URL(string: "http://example.com/upload")!
var request = URLRequest(url: requestURL)
request.httpMethod = "POST"
let data = try! Data(contentsOf: fileURL)
let boundary = "Boundary-\(UUID().uuidString)"
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
var body = Data()
body.append("--\(boundary)\r\n".data(using: .utf8)!)
body.append("Content-Disposition: form-data; name=\"file\"; filename=\"\(fileURL.lastPathComponent)\"\r\n".data(using: .utf8)!)
body.append("Content-Type: image/jpeg\r\n\r\n".data(using: .utf8)!)
body.append(data)
body.append("\r\n".data(using: .utf8)!)
body.append("--\(boundary)--\r\n".data(using: .utf8)!)
request.httpBody = body
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
// 업로드 완료 후 처리할 코드 추가
}
task.resume()
}
위의 코드에서는 파일을 업로드하기 위해 multipart/form-data 형식의 요청을 만듭니다. 파일 데이터는 Data(contentsOf: fileURL)를 통해 가져옵니다. 파일의 이름과 타입을 지정한 후 요청에 첨부합니다.
3. 파일 업로드 호출
이제 파일을 선택하고 업로드하는 작업을 호출하는 방법을 알아보겠습니다. 아래의 코드는 사용자가 이미지를 선택한 후에 uploadFile(with:) 함수를 호출하도록 구성하는 예제입니다.
extension YourViewController: UIImagePickerControllerDelegate & UINavigationControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
picker.dismiss(animated: true, completion: nil)
if let fileURL = info[.imageURL] as? URL {
uploadFile(with: fileURL)
}
}
}
위의 코드에서 didFinishPickingMediaWithInfo 메소드는 사용자가 이미지를 선택한 후 호출됩니다. 선택한 파일의 URL을 가져와 uploadFile(with:) 함수를 호출하여 업로드를 수행합니다.
결론
이제 Swift에서 파일을 업로드하는 방법을 알았습니다. URLSession을 사용하여 파일을 업로드하는 것은 매우 간단하며, 위의 예제 코드를 사용하여 시작할 수 있습니다.