Swift moya 上传带有正文参数的图像,例如 Postman

问题描述

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

Postman

在 Postman Console 上:

Postman Console

但是在调用项目请求时,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 一样正确发送带有正文参数的图像?

解决方法

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

因此您需要使用 .uploadMultipart 任务来使用 Moya 来实现它。
Moya docs 中有一个代码示例。