【问题标题】:Alamofire - multipart form data key:valueAlamofire - 多部分表单数据键:值
【发布时间】:2016-07-29 10:37:14
【问题描述】:

我正在尝试在服务器上上传视频。我正在使用 Alamofire。我越来越接近解决方案,但是......我有一个多部分数据表单方法,其中包括这样的参数 "param1":"test", "param2":["1", "2"], param3:{"测试”:“123”}

param1 仍然放置一个函数 Alamofire.upload:

multipartFormData.appendBodyPart (date "test" .dataUsingEncoding (NSUTF8StringEncoding, allowLossyConversion: false) !, name: "param1")

如何添加param2和param3?

有我的方法:

    Alamofire.upload(
                .POST,
                url,
                headers: headers,
                multipartFormData: { multipartFormData in

                    multipartFormData.appendBodyPart(data: "test".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param1")

//it is only visualization what I want to do. I know that it isn't working.
                    //multipartFormData.appendBodyPart(data: ["1", "2"].dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param2")
                    //multipartFormData.appendBodyPart(data: {"test": "123 "}.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param3")

                    let fileURL = DataManager().getFileDirectionForFile("movie.mp4")
                    multipartFormData.appendBodyPart(fileURL: fileURL, name: "file")
                },
                encodingCompletion: { encodingResult in
                    switch encodingResult {

                    case .Success(let upload, _, _):
                        upload.responseString { response in
                            debugPrint(response)
                        }

                    case .Failure(let encodingError):
                        print(encodingError)
                    }
                }

【问题讨论】:

    标签: ios objective-c swift post alamofire


    【解决方案1】:

    首先创建param dict以传入请求。

    let array = ["1","2"]
    let dict = [
        "test" : "123"
    ]
    
    let params = [
        "param1" : "test",
        "param2" : array,
        "param3" : dict
    ]
    

    然后将该参数变量传递给 Alamofire.upload

    Alamofire.upload(.POST, url, multipartFormData: { (multipartFormData) in
            multipartFormData.appendBodyPart(data: params["param1"]!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name: "param1")
            multipartFormData.appendBodyPart(data: params["param2"]!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name: "param2")
            multipartFormData.appendBodyPart(data: params["param3"]!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name: "param3")
            }) { (encodingResult) in
                switch encodingResult {
    
                case .Success(let upload, _, _):
                    upload.responseString { response in
                        debugPrint(response)
                    }
    
                case .Failure(let encodingError):
                    print(encodingError)
                }
        }
    

    【讨论】:

    • 欢迎您 :) 如果您喜欢它,请接受@Dzeremix 的答案
    • 有趣的是,您如此祈祷以接受错误的答案。是的,您的代码将编译,但由于Array/NSArrayDictionary/NSDictionary 无法响应选择器dataUsingEncoding,它将导致运行时崩溃。您的代码没有编译错误,因为您的字典中的 AnyObject 与 Obj-C 中的 id 相同,并且可以尝试调用任何 Obj-C 选择器,不管它是否存在。
    • 如何添加认证?
    【解决方案2】:

    这取决于您的 API。我在相同情况下的 API 可以处理这种格式:

    multipartFormData.appendBodyPart(data: "1".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param2[0]")
    multipartFormData.appendBodyPart(data: "2".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param2[1]")
    multipartFormData.appendBodyPart(data: "123 ".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param3[test]")
    

    也许对你也有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 2018-12-18
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多