HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 如何使用Moya Swift使用多部分请求上传图像?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Moya 10.0.1,当我尝试将图像上传到服务器时,我遇到了问题. @H_673_5@ @H_673_5@我确实遵循了Multipart Upload example,这是我的设置代码

@H_673_5@
typealias updateUserAvatarParameters = (userId: Int,image: UIImagE)

enum APITarget {
    case updateUserAvatar(parameters: updateUserAvatarParameters)
}

extension APITarget: TargetType {

    public var baseURL: URL { return URL(String: "http://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"]
        }
    }
}
@H_673_5@但是,当我提出请求时,我得到了@L_748_3@moyaError:

@H_673_5@
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)")
    }
})
@H_673_5@

ios – 如何使用Moya Swift使用多部分请求上传图像?

@H_673_5@我不知道我做错了什么,我也不知道什么是statusCode 500?有谁知道为什么?

@H_673_5@另外,当我使用相同的设置(url,参数……)向Alamofire提出请求时,一切正常:

@H_673_5@
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",mimeType: "image/jpeg")
    multipartFormData.append(userIdData,withName: "cusId")
},to: "http://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_iR_430_11845@g",filename: "user.jpeg",mimeType: "image/jpeg")]
        formData.append(Moya.MultipartFormData(provider: .data(memberIdData),name: "member_id"))
        return .uploadMultipart(formData)
    }
@H_673_5@在Moya多部分请求中,我们必须将参数作为multipartdata形式及其密钥名称传递.

大佬总结

以上是大佬教程为你收集整理的ios – 如何使用Moya Swift使用多部分请求上传图像?全部内容,希望文章能够帮你解决ios – 如何使用Moya Swift使用多部分请求上传图像?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。