使用Alamofire Router实现文件上传

9

我该如何使用 Alamofire Router 上传文件?我一直在为此苦苦挣扎。

同时,我也想知道如何在同一个请求中上传文件和参数,使用 Alamofire Router。

谢谢!

1个回答

1
我使用以下代码上传图片。对于给定的文件类型,您应该能够相应地调整 multipartEncoding 块。
let json: [String : Any] = ["key", "value"]

let image = UIImage(named: "Something")!

guard let imageData = UIImagePNGRepresentation(image) else {
    // We couldn't convert the image into data :(
}

let multipartEncoding: (MultipartFormData) -> Void = { multipartFormData in
    multipartFormData.append(imageData, withName: "image", fileName: "image.png", mimeType: "image/png")
}

let request = Router.uploadPicture(parameters: json) // This is just a plain POST

sessionManager.upload(
    multipartFormData: multipartEncoding,
    with: request,
    encodingCompletion: { (encodingResult) in
        switch encodingResult {
        case .success(let request, _, _):
            request.validate().responseJSON(completionHandler: { (dataResponse) in
                if let error = dataResponse.result.error {
                    // Network request failed :(
                }
                // SUCCESS!
            })
        case .failure(_):
            // Couldn't encode the image :(
        }
})

假设您的路由器(Router)看起来像这样。
enum Router: URLRequestConvertible {

    case uploadPicture(parameters: Parameters)

    static var baseUrl = "https://website.com/"

    var method: HTTPMethod {
        switch self {
        case .uploadPicture(_):
            return .post
        }
    }

    var path: String {
        switch self {
        case .uploadPicture(_):
            return "api/upload-picture/"
        }
    }

    // MARK: - URLRequestConvertible

    func asURLRequest() throws -> URLRequest {

        let url = try Router.baseUrl.asURL().appendingPathComponent(path)
        var urlRequest = try URLRequest(url: url, method: method)
        var encodedUrlRequest: URLRequest?

        switch self {

        case .uploadPicture(let parameters):
            encodedUrlRequest = try? JSONEncoding.default.encode(urlRequest, with: parameters)

        }

        return encodedUrlRequest ?? urlRequest
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接