使用alamofire的多部分/表单数据 [英] multipart/form-data using alamofire

查看:91
本文介绍了使用alamofire的多部分/表单数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在进行.post API调用,我需要使用multipart / form-data。我知道如何使用JSON进行通话,但是我对multipart / form-data并不熟悉。使用JSON,这是一个超级简单的调用。只需创建一个类型参数:

I am making an .post API call and I need to use multipart/form-data. I know how to make the call using JSON but I am not familiar with multipart/form-data. Using JSON, it is a super easy call. Just create a type parameters:

var parameters:Parameters = [:]
parameters["username"] = emailTextField.text!
parameters["password"] = passwordTextField.text!

Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
    //Code here 
}

我们将如何使用表单数据来编写它。最简单的方法是什么?我不需要上传任何文件或任何内容。我将要做的就是用上述极为简单的项目进行通话。使用表单数据执行此操作的最干净方法是什么?我确信这是一个非常基本的问题,我四处寻找有关堆栈溢出的帮助,但我只看到它用于文件的更高级调用。我只是想知道如何以最简单的方式做到这一点,实质上是替代JSON调用。

How would we write this using form data. What is the easiest way to do this? I don't need to upload any files or anything. All I will ever be doing is making calls with extremely simple items like above. What is the cleanest way to do this using form data. I am sure this is an extremely basic question and I looked around for help on stack overflow but I only see this being used for more advanced call with files. I just want to know how to do this in the simplest way possible as essentially a replacement for JSON calls.

推荐答案

文档示例:

Alamofire.upload(
    multipartFormData: { multipartFormData in
        multipartFormData.append(unicornImageURL, withName: "unicorn")
        multipartFormData.append(rainbowImageURL, withName: "rainbow")
    },
    to: "https://httpbin.org/post",
    encodingCompletion: { encodingResult in
        switch encodingResult {
        case .success(let upload, _, _):
            upload.responseJSON { response in
                debugPrint(response)
            }
        case .failure(let encodingError):
            print(encodingError)
        }
    }
)

该方法的完整说明(如果需要)设置标题。):

The method's full description (if you need to set headers. Source):

/// Encodes `multipartFormData` using `encodingMemoryThreshold` with the default `SessionManager` and calls
/// `encodingCompletion` with new `UploadRequest` using the `url`, `method` and `headers`.
///
/// It is important to understand the memory implications of uploading `MultipartFormData`. If the cummulative
/// payload is small, encoding the data in-memory and directly uploading to a server is the by far the most
/// efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to
/// be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory
/// footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be
/// used for larger payloads such as video content.
///
/// The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory
/// or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`,
/// encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk
/// during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding
/// technique was used.
///
/// - parameter multipartFormData:       The closure used to append body parts to the `MultipartFormData`.
/// - parameter encodingMemoryThreshold: The encoding memory threshold in bytes.
///                                      `multipartFormDataEncodingMemoryThreshold` by default.
/// - parameter url:                     The URL.
/// - parameter method:                  The HTTP method. `.post` by default.
/// - parameter headers:                 The HTTP headers. `nil` by default.
/// - parameter encodingCompletion:      The closure called when the `MultipartFormData` encoding is complete.
public func upload(
    multipartFormData: @escaping (MultipartFormData) -> Void,
    usingThreshold encodingMemoryThreshold: UInt64 = SessionManager.multipartFormDataEncodingMemoryThreshold,
    to url: URLConvertible,
    method: HTTPMethod = .post,
    headers: HTTPHeaders? = nil,
    encodingCompletion: ((SessionManager.MultipartFormDataEncodingResult) -> Void)?)

这篇关于使用alamofire的多部分/表单数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆