如何使用 alamofire 图像检查分段上传是否成功



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

// 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
                }
            })
        }
    }
}

万一我把它放在离线模式。它仍然会执行函数并仍然履行承诺。即使网络处于离线状态。我认为这是因为它正在检查编码结果是否成功。 网络调用本身是否不。

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

导入说明:

  • 如果我们收到 200 个代码,服务器返回 nill 这意味着已经上传了图像。

如果要使用状态代码来确定成功或失败,则应添加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)
            }
        }
    }
}

最新更新