Swift moya 像在 Postman 上一样上传带有 body 参数的图片

Swift moya upload image with body params like on Postman

我正在尝试上传带有正文参数的图片。邮递员正确发送:

并且在 Postman 控制台上:

但是在项目上调用请求时,Xcode 冻结并且没有响应。

import Moya

protocol BaseTargetType: TargetType { }

extension BaseTargetType {
    
    public var baseURL: URL { URL(string: EnvConfigs.baseUrl)! }
    
    public var path: String { CommonConfigs.urlPath }
    
    public var method: Moya.Method { .post }
    
    public var sampleData: Data { Data() }
    
    public var headers: [String : String]? { nil }
    
    public var validate: Bool { true }
    
    public var requiredToken: Bool { true }
}

enum ImageTarget {
    case upload(data: Data, type: String)
}

extension ImageTarget: BaseTargetType {
    var task: Task {
        switch self {
        case let .upload(data, _):
            let model = Model(userFile: data)
            // here
            return .requestJSONEncodable(model)
        }
    }
}

struct Model: Codable {
    var action: String = "upload_photo"
    var type: String = "3"
    var userFile: Data
}

如何像在 Postman 上那样正确地发送带有 body 参数的图片?

您可能会注意到在 Postman 中 ContentType header 的值设置为 multipart/form-data
多部分请求将一组或多组数据组合成一个 body,由边界分隔。您通常将这些请求用于文件上传和在单个请求中传输多种类型的数据(例如,一个文件以及 JSON object)。

所以你需要使用.uploadMultipart任务来使用Moya来实现它。
Moyadocs.

中有代码示例