无法上传文件RXSwift Moya multipart

时间:2016-09-20 07:20:52

标签: swift multipartform-data rx-swift moya

我正在使用Moya处理我的swift应用程序和api之间的通信,我能够发布并获取数据但无法将文件发布到api服务器,以下是我的代码

enum TestApi {
    ...
    case PostTest(obj: [String: AnyObject])
    ...
}

extension TestApi: TargetType {

    var baseURL: NSURL {
        switch self {
            case .PostTest:
                return NSURL(string: "http://192.168.9.121:3000")!
        }
    }

    var path: String {
        switch self {
            case .PostTest:
                return "/api/file"
        }
    }

    var method: Moya.Method {
        switch self {
            case .PostTest:
                return .POST
        }
    }

    var parameters: [String: AnyObject]? {
        switch self {
            case .PostTest(let obj):
                return ["image": obj["image"]!]
        }
    }

    var sampleData: NSData {
        return "".dataUsingEncoding(NSUTF8StringEncoding)!
    }

    var multipartBody: [MultipartFormData]? {
        switch self {
            case .PostTest(let multipartData):

                guard let image = multipartData["image"] as? [NSData] else { return[] }

                let formData: [MultipartFormData] = image.map{MultipartFormData(provider: .Data($0), name: "images", mimeType: "image/jpeg", fileName: "photo.jpg")}
                return formData


            default:
                return []
        }
    }
}

以下是我打电话的方式

return testApiProvider.request(.PostTest(obj: _file)).debug().mapJSON().map({ JSON -> EKResponse? in
    return Mapper<EKResponse>().map(JSON)
})

我没有收到任何回复,也没有向api服务器发送命中

2 个答案:

答案 0 :(得分:2)

Moya 8.0.0中不推荐使用Multipart正文。而不是使用任务上传。

检查此问题:

Moya multipart upload target

答案 1 :(得分:1)

调用代码中缺少订阅。这不是真正的Moya问题,而是Reactive Extensions的问题。以下.subscribeNext { _ in }解决了我的问题

return testApiProvider
    .request(.PostTest(obj: _file))
    .debug()
    .mapJSON()
    .map({ JSON -> EKResponse? in
        return Mapper<EKResponse>().map(JSON)
    })
    .subscribeNext { _ in }