ios - 在 iOS Swift 中使用 Alamofire 发送带有 MultipartFormData 的 POST 参数

标签 ios swift http alamofire

我是第一次使用 Alamofire。我使用的是最新版本的 Alamofire 1.3.1。我想在一次 API 调用中发送一张图片、一段视频和一些 POST 参数。我正在使用多部分表单数据。多部分模块正在工作。我在发送额外的 POST 参数params 时遇到问题。下面是我的代码。 “params”是包含额外参数的字典吗?如何在请求中附加这些 POST 参数。请帮忙

        var fullUrl :String = Constants.BASE_URL + "/api/CompleteChallenge"
         var params = [
        "authKey": Constants.AuthKey,
        "idUserChallenge": "16",
        "comment": "",
        "photo": imagePath,
        "video": videoPath,
        "latitude": "1",
        "longitude": "1",
        "location": "india"
    ]

    let imagePathUrl = NSURL(fileURLWithPath: imagePath!)
    let videoPathUrl = NSURL(fileURLWithPath: videoPath!)

        Alamofire.upload(
        .POST,
        URLString: fullUrl, // http://httpbin.org/post
        multipartFormData: { multipartFormData in
            multipartFormData.appendBodyPart(fileURL: imagePathUrl!, name: "photo")
            multipartFormData.appendBodyPart(fileURL: videoPathUrl!, name: "video")
        },
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .Success(let upload, _, _):
                upload.responseJSON { request, response, JSON, error in

                  }
                }
            case .Failure(let encodingError):

            }
        }
    )

最佳答案

我终于找到了解决方案 :)。

我们可以在请求中附加数据作为 multipartformdata。

下面是我的代码。

  Alamofire.upload(
        .POST,
        URLString: fullUrl, // http://httpbin.org/post
        multipartFormData: { multipartFormData in
            multipartFormData.appendBodyPart(fileURL: imagePathUrl!, name: "photo")
            multipartFormData.appendBodyPart(fileURL: videoPathUrl!, name: "video")
            multipartFormData.appendBodyPart(data: Constants.AuthKey.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"authKey")
            multipartFormData.appendBodyPart(data: "\(16)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"idUserChallenge")
            multipartFormData.appendBodyPart(data: "comment".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"comment")
            multipartFormData.appendBodyPart(data:"\(0.00)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"latitude")
            multipartFormData.appendBodyPart(data:"\(0.00)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"longitude")
            multipartFormData.appendBodyPart(data:"India".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"location")
        },
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .Success(let upload, _, _):
                upload.responseJSON { request, response, JSON, error in


                }
            case .Failure(let encodingError):

            }
        }
    )

编辑 1: 对于那些试图发送数组而不是 float 、整数或字符串的人,他们可以将数组或任何类型的数据结构转换为 Json 字符串,传递此 JSON 字符串作为一个普通的字符串。并在后端解析这个json字符串得到原始数组

关于ios - 在 iOS Swift 中使用 Alamofire 发送带有 MultipartFormData 的 POST 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31949118/

相关文章:

ios - 'isMenuVisible' 的 Setter 在 iOS 13.0 中被弃用

java - okhttp 不允许设置 content-type

cocoa - 如何在 iPhone 上获取 cocoa 中的 http

未找到 java.net.malformedurlexception 协议(protocol)

ios - 表格单元格中的 MPMoviePlayer 崩溃

ios - xcode 正在创建通用 xcode 存档而不是 iOS App Archive

ios - 链接到没有重定向的应用程序商店?

ios - 在动态 UITableView 原型(prototype)中访问行高

swift - 如何在 tvOS 中为密码创建复合 UITextField

swift - MSDKUI 2.1.1更新后添加GuidanceManeuverMonitor时语音导航不工作