Alamofire 4 文件上传参数问题

Posted

技术标签:

【中文标题】Alamofire 4 文件上传参数问题【英文标题】:Alamofire 4 File Upload Parameter issue 【发布时间】:2017-03-21 18:35:56 【问题描述】:

请看一下邮递员的照片 POSTMAN success result 但是代码没有运行我遗漏了一些东西请帮帮我

 var parameters = [String: String]()
        parameters = [
            "profile_image": "imagefile"
        ]

        let headers: HTTPHeaders = [
            "Accept": "application/json"
        ]

        let url = "http://******/public/api/v1/profile/update-picture?api_token=" + "aySlC26ZTHtlnS0lhUpdghxkd9gKJBLXLYFUO2Jidmiisoka9iFIicwRIZFx"
        let completeUrl = URL(string:url)!

        let imageData = UIImageJPEGRepresentation(chosenImage!, 1)
        print ("image data:: \(imageData)")
        print ("chosenImage:: \(chosenImage)")

//        Alamofire.upload(imageData!, to: completeUrl).response  response in
//            print (response)
//        

        Alamofire.upload(
            multipartFormData:  
                multipartFormData in
                multipartFormData.append(imageData!,
                                         withName: "imagefile",
                                         fileName: "image.jpg",
                                         mimeType: "image/jpeg")
                for (key, value) in parameters 
                    multipartFormData.append(value.data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue))!, withName: key)
                
        ,
            to: completeUrl,
            headers: headers,
            encodingCompletion:  encodingResult in
                switch encodingResult 
                case .success(let upload, _, _):
                    upload.responseJSON response in
                        print(response)
                    
                case .failure(let encodingError):
                    print(encodingError)
                
            
        )

Postman Response 邮递员成功但标题有问题,你能指出我犯的愚蠢错误

【问题讨论】:

“代码不运行”...“不运行”是什么意思?您是否收到错误,如果是,错误是什么?如果它根本没有运行,您确定您完全到达responseJSON 行吗?设置断点,看看你要去哪里,你不能去哪里...... 另外,顺便说一句,Charles 和 WireShark 之类的工具对于协调代码正在执行的操作而不是邮递员报告的操作非常有用。 无关,一般不用手动设置Accept标头。 Alamofire 会为您做到这一点。 我收到响应,好像我的参数有问题。代码运行但不上传图片 您正在向我们展示邮递员的回复。我们应该看看成功的请求是什么样的,以便将其与您的代码生成的内容进行比较。 【参考方案1】:

我相信您需要以这种方式附加图像

multipartFormData.append(imageData!,
    withName: "profile_image",
    fileName: "image.jpg",
    mimeType: "image/jpeg")

而且你不需要设置或包含parameters = ["profile_image": "image file"]

正如@rob 提到的,使用 Charles 并将 Postman 的请求与模拟器的请求进行比较。这将有助于查明有什么不同

【讨论】:

谢谢,是我自己的无知,设置withName解决了我的问题。谢谢

以上是关于Alamofire 4 文件上传参数问题的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4:如何使用 Alamofire 在参数中发布文件?

alamofire上传带json参数的图片

使用 Alamofire(多部分数据)上传带有额外参数的 .PDF 文件时出错

如何使用 Alamofire.upload 函数上传带有一些参数的图片或 wav 文件

如何在 Alamofire 中上传文件并在参数中传递数据 - swift 5

无法使用 alamofire 4 上传带参数的图像?