如何在Moya Swift中使用分段请求上传图像?

编程入门 行业动态 更新时间:2024-10-15 00:22:49
本文介绍了如何在Moya Swift中使用分段请求上传图像?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在使用Moya 10.0.1,尝试将图像上传到服务器时遇到问题.

I'm using Moya 10.0.1 and I'm having a problem when I'm trying to upload an image to the server.

我确实遵循了分段上传示例,并且这是我的设置代码:

I did follow the Multipart Upload example and this is my setup code:

typealias UpdateUserAvatarParameters = (userId: Int, image: UIImage) enum APITarget { case updateUserAvatar(parameters: UpdateUserAvatarParameters) } extension APITarget: TargetType { public var baseURL: URL { return URL(string: "domain/api")! } public var path: String { switch self { case .updateUserAvatar: return "/postuserimage" } } public var method: Moya.Method { switch self { default: return .post } } public var task: Task { switch self { case .updateUserAvatar(let parameters): let imageData = UIImagePNGRepresentation(parameters.image) ?? Data() let userIdData = parameters.userId.string.data(using: String.Encoding.utf8) ?? Data() let imageMultipartFormData = MultipartFormData(provider: .data(imageData), name: "img", fileName: "user_avatar.jpeg", mimeType: "image/jpeg") let userIdMultipartFormData = MultipartFormData(provider: .data(userIdData), name: "cusId") return .uploadMultipart([imageMultipartFormData, userIdMultipartFormData]) } } public var sampleData: Data { return Data() } public var headers: [String : String]? { switch self { case .updateUserAvatar: return ["Content-type" : "multipart/form-data"] default: return ["Content-type" : "application/json"] } } }

但是,当我发出请求时,出现了MoyaError:

However, when I make a request, I got an MoyaError:

let parameters = UpdateUserAvatarParameters(userId: 1, image: pickedImage) provider.request(.updateUserAvatar(parameters: parameters), completion: { result in switch result { case .success(let response): do { try _ = response.filterSuccessfulStatusCodes() print("200 - 299: \(response.data)") } catch { print(error) // This code will run because the statusCode is 500 } case .failure(let error): print("Failure: \(error)") } })

我不知道自己做错了什么,也不知道statusCode 500是什么?有人知道为什么吗?

I have no idea about what I did wrong, I also don't know what is statusCode 500? Does anyone know why?

此外,当我使用相同的设置(网址,参数...)向Alamofire发送请求时,一切正常:

Addition, when I make a request with Alamofire with the same setup (url, parameters...), everything works normally:

Alamofire.upload(multipartFormData: { multipartFormData in let imageData = UIImagePNGRepresentation(pickedImage) ?? Data() let userIdData = userId.string.data(using: String.Encoding.utf8) ?? Data() multipartFormData.append(imageData, withName: "img", fileName: "user_avatar.jpeg", mimeType: "image/jpeg") multipartFormData.append(userIdData, withName: "cusId") }, to: "domain/api/postuserimage", encodingCompletion: { result in switch result { case .success(let upload, _, _): upload.uploadProgress(closure: { progress in print("Upload Progress: \(progress.fractionCompleted)") }) upload.responseJSON(completionHandler: { response in print(response.result.value) }) case .failure(let encodingError): print(encodingError) } })

推荐答案

var task: Task { switch self { case .updateProfilePic(let memberID, let image): let imageData = UIImageJPEGRepresentation(image, 1.0) let memberIdData = memberID.data(using: String.Encoding.utf8) ?? Data() var formData: [Moya.MultipartFormData] = [Moya.MultipartFormData(provider: .data(imageData!), name: "user_img", fileName: "user.jpeg", mimeType: "image/jpeg")] formData.append(Moya.MultipartFormData(provider: .data(memberIdData), name: "member_id")) return .uploadMultipart(formData) }

在Moya多部分请求中,我们必须将参数作为多部分数据形式及其键名进行传递.

In Moya multipart request we have to pass parameter as multipartdata form along with it's key name.

更多推荐

如何在Moya Swift中使用分段请求上传图像?

本文发布于:2023-11-26 11:23:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1633801.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图像   上传   如何在   Swift   Moya

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!