ios - 使用 Alamofire - Swift 3 上传对象时如何捕获错误?

标签 ios swift alamofire

当我在没有互联网连接的情况下测试我的项目时,为了调用上传功能,我无法捕获失败情况。
我已经打印了状态代码,但我得到的是 nil 并显示了我的默认值。
我怎么了?
而且我还收到了如下文本的错误:

==)[r]: FAILURE: Error Domain=NSURLErrorDomain Code=-1009 "似乎已断开与互联网的连接。" UserInfo={NSUnderlyingError=0x1d4441560 {Error Domain=kCFErrorDomainCFNetwork Code=-1009 "(null)" UserInfo={_kCFStreamErrorCodeKey=50, _kCFStreamErrorDomainKey=1}}, NSErrorFailingURLStringKey=https://appdominname/chatroom/5a3cba41f7255b356eeee33/media, NSErrorFailingURLKey=https://appdominname/chatroom/5a3cba41f7255b356eeee33/media, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=50, NSLocalizedDescription=似乎已断开与互联网的连接。}

==)[c]: 123

func uploadPost(parameters:[String:Any], fileUrl:URL, _ callback: @escaping (JSON) -> Void)  {

    let url = self.customUrl(parameters)

    Alamofire.upload(multipartFormData: { (multipartFormData) in

        multipartFormData.append(fileUrl, withName: "media")

        for (key, value) in parameters {
            multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
        }

    }, usingThreshold: .init(), to: url, method: .post, headers:  ["Authorization": "Bearer \(currentUser.token)"]) { (encodingResult) in
        switch encodingResult {
        case .success(let upload, _, _):

            upload.responseJSON(completionHandler: { (response) in

                print("==)[r]:",response)
                print("==)[c]:",response.response?.statusCode ?? "123")

                if let statusCode = response.response?.statusCode {
                    switch statusCode {
                    case 201:
                        print("success statusCode: \(statusCode)")
                    default:
                        print("error with response status: \(statusCode)")
                    }
                }

                if let result = response.result.value {
                    let json = result as! NSDictionary
                    //                        print(json["status"] ?? "")
                    callback(JSON(json))
                }
            })

        case .failure(let encodingError):

            alertWithConfirm(title: localString(string: "WARNING"), message: localString(string: "ERROR_UPLOAD_API_FAIL"), afterConfirm: { _ in
                callback(JSON(encodingError))
            })
            print("error:\(encodingError)")
        }
    }
}

最佳答案

您的代码仅包含用于编码的 failure block ,但不包含请求本身。在您的第一个 success block 中,您应该做类似的事情

case .success(let upload, _, _):
    switch response.result {
        case .success:
            //THE REQUEST WAS SUCCESSFUL
        case .failure:
            //THIS IS WHERE YOU WILL GET YOUR REQUEST FAILURE
    }

关于ios - 使用 Alamofire - Swift 3 上传对象时如何捕获错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49355382/

相关文章:

ios - 编辑器中缺少 Xcode 文件

ios - 在离线或飞行模式下处理远程推送通知

ios - 如何将变量从 NSNumberFormatter 传输到另一个 ViewController?

swift - 如何使用 swift 在 uicollectionview 中添加投影?

php - 快速以肖像模式拍摄照片并上传到服务器 - 上传的图像显示方向错误

ios - 为什么我的物理 iPhone 没有显示在 xcode 中以测试应用程序?

ios - 如何在 EventKit 中使用 CalendarIdentifier 获取提醒?

ios - 在 RxSwift 中调度订阅

ios - 如何将嵌套对象作为参数发送?

ios - 如何将接受的图像 MIME 类型添加到 Alamofire 5.2