【问题标题】:How to check if the multipart upload was successful with alamofire image如何使用 alamofire 图像检查分段上传是否成功
【发布时间】:2017-08-23 17:35:20
【问题描述】:

我正在进行网络调用以将图像上传到后端服务器。现在我正在使用以下代码。此代码在互联网在线的条件下完美运行。

// MARK: - PUT

    static func PUT(URL: String,
                    data: Data,
                    mimeType: String,
                    headers: [String: String]?) -> Promise<Void>
    {
        return Promise { fulfill, reject in

            let URL = try! URLRequest(url: URL, method: .put, headers: headers)

            Alamofire.upload(
                multipartFormData: { multipartFormData in

                    multipartFormData.append(InputStream.init(data: data), withLength: UInt64(data.count), name: "image", fileName: "file.png", mimeType: mimeType)
            },
            with: URL,
            encodingCompletion: { encodingResult in
                switch encodingResult {
                    case .success(let upload, _, _):
                    upload.responseJSON { response in

                        if response.result.value == nil {
                            fulfill()
                        }else {
                            reject(response.result.error!)
                        }
                    }
                    case .failure( _):
                    break
                }
            })
        }
    }
}

如果我将其置于离线模式。它仍然会执行函数并且仍然 fullfills() 承诺。即使网络处于离线状态。我认为这是因为它正在检查 encodingResult 是否成功。不适用于网络调用本身。

如何检查网络调用是否成功?它正在返回 Void。

导入备注:

  • 如果我们收到 200 码表示已上传图片,服务器返回 nill。

【问题讨论】:

  • 我不明白这个。首先,在.failure 的情况下,您不履行或拒绝。我原以为你想reject。其次,如果回复是.success,但没有value,则表示您正在履行承诺,但如果您确实收到了value,则表示您正在拒绝。这似乎倒退了。
  • 如果我们有 200 码,服务器返回“nil”。这就是它的设置方式。你说得对,我需要在 .failure 中添加拒绝,但这并不能改变这种情况。
  • 您将如何更改现有代码? :) 感谢您的提示

标签: ios swift network-programming alamofire promisekit


【解决方案1】:

如果你要使用状态码来判断成功或失败,你应该添加validate

例如:

static func PUT(URL: String,
                data: Data,
                mimeType: String,
                headers: [String: String]?) -> Promise<Void> {
    return Promise { fulfill, reject in

        let URL = try! URLRequest(url: URL, method: .put, headers: headers)

        Alamofire.upload(
            multipartFormData: { multipartFormData in
                multipartFormData.append(data, withName: "image", fileName: "file.png", mimeType: mimeType)
        }, with: URL) { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                upload
                    .validate(statusCode: 200 ..< 300)
                    .responseJSON { response in
                        switch response.result {
                        case .success:
                            fulfill()
                        case .failure(let error):
                            reject(error)
                        }
                }
            case .failure(let error):
                reject(error)
            }
        }
    }
}

以上假设成功响应后,您还将获得 JSON 响应。您可能需要对value 进行一些额外检查。

如果您在成功后没有返回 JSON,那么只需使用 response,而不是 responseJSON

static func PUT(URL: String,
                data: Data,
                mimeType: String,
                headers: [String: String]?) -> Promise<Void> {
    return Promise { fulfill, reject in
        let URL = try! URLRequest(url: URL, method: .put, headers: headers)

        Alamofire.upload(
            multipartFormData: { multipartFormData in
                multipartFormData.append(data, withName: "image", fileName: "file.png", mimeType: mimeType)
        }, with: URL) { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                upload
                    .validate(statusCode: 200 ..< 300)
                    .response { response in
                        if let error = response.error {
                            reject(error)
                        } else {
                            fulfill()
                        }
                }
            case .failure(let error):
                reject(error)
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 2019-12-07
    • 2017-03-08
    • 2019-09-04
    • 2017-11-07
    • 2018-08-09
    • 1970-01-01
    相关资源
    最近更新 更多