如何使用 alamofire 图像检查分段上传是否成功
How to check if the multipart upload was successful with alamofire image
我正在进行网络调用以将图像上传到后端服务器。现在我正在使用以下代码。此代码在互联网在线的情况下完美运行。
// 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。
导入备注:
- 服务器 returns 如果我们收到 200 代码,则表示已上传图片。
如果您打算使用状态代码来确定成功或失败,您应该添加 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)
}
}
}
}
我正在进行网络调用以将图像上传到后端服务器。现在我正在使用以下代码。此代码在互联网在线的情况下完美运行。
// 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。
导入备注:
- 服务器 returns 如果我们收到 200 代码,则表示已上传图片。
如果您打算使用状态代码来确定成功或失败,您应该添加 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)
}
}
}
}