如何使用 Alamofire 和会话管理器附加 MultipartFormData 以及其他帖子参数? [复制]

Posted

技术标签:

【中文标题】如何使用 Alamofire 和会话管理器附加 MultipartFormData 以及其他帖子参数? [复制]【英文标题】:How to append MultipartFormData along with other post parameters using Alamofire and session manager? [duplicate] 【发布时间】:2019-02-14 08:34:52 【问题描述】:

目前我使用:

func post(_ url: URL, parameters: [String: Any]?, image: UIImage?, headers: [String: String]?, success: @escaping SuccessHandler, failure: @escaping ErrorHandler) 
    manager.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers).responseJSON  [weak self] response in
        //do something with a response
    

如何将图像附加到请求中?

【问题讨论】:

你应该使用 alamofire 的多部分请求 如何使用多部分请求?你能分享一个例子吗? 请查看我的回答 【参考方案1】:

这是我的答案

 Alamofire.upload(multipartFormData:  multipartFormData in

            //Single image to pass here
            if image != nil
                if let imageData = UIImageJPEGRepresentation(image!, 0.8) 
                    multipartFormData.append(imageData, withName: "Your key here", fileName: "\(UUID().uuidString).jpeg", mimeType: "image/jpeg")
                
            

            //Here array of UIImages
            if images.count != 0
                for img in images
                    if let imageData = UIImageJPEGRepresentation(img, 0.8) 
                        multipartFormData.append(imageData, withName: "Your key here", fileName: "\(UUID().uuidString).jpeg", mimeType: "image/jpeg")
                    
                
            


            //params are your other post parameters
            if let parm = params
                for (key, value) in parm 
                    multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
                
            


         , to: "Your url here" , method: .post, headers: headers,
            encodingCompletion:  encodingResult in


                switch encodingResult 
                case .success(let upload, _, _):
                    //Success response
                case .failure(let encodingError):
                    //Failure response

                
         )

【讨论】:

【参考方案2】:

你应该考虑使用上传方式:

manager.upload(multipartFormData:  (multipartFormData) in

        for (key,value) in data
            multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key)
        

        if let file = self.attachedFile
            if let f = file.getFile()
            
                multipartFormData.append(f, withName: "some_name", fileName: "attachement.pdf", mimeType: "application/pdf")
            
        

    , to:"Some URL",
       method: .post,
       encodingCompletion:  encodingResult in 


            switch encodingResult 
            case .success(let upload, _, _):
                //Success response
            case .failure(let encodingError):
                //Failure response

            
     )

【讨论】:

以上是关于如何使用 Alamofire 和会话管理器附加 MultipartFormData 以及其他帖子参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能初始化 Alamofire 4 会话管理器?

AlamoFire:公钥固定不起作用

会话失效后如何重新验证会话 Alamofire?

使用 Alamofire 删除附加在 URL 末尾的 ?=

在 Alamofire 4.0 中初始化 SessionManager

Alamofire 库没有响应 Swift 包管理器