gpt4 book ai didi

ios - AFNetworking 2.0 向服务器发送参数和图像

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:24 25 4
gpt4 key购买 nike

我正在使用 AFNetworking2向服务器发送参数和图像。

    manager.POST(urlPath, parameters: parameters, constructingBodyWithBlock: { (formData: AFMultipartFormData!) -> Void in
formData.appendPartWithFileData(imageData!, name: "image", fileName: "dummy.jpg", mimeType: "image/jpeg")
}, success: { (dataTask: NSURLSessionDataTask!, responseObject: AnyObject!) -> Void in
println("success: \(responseObject.description)")

}, failure: { (dataTask: NSURLSessionDataTask!, error: NSError!) -> Void in
println("failure: \(error)")
})


在服务器端,数据将是 dictionaryparameters(QueryDict) 合并和图像 data(MultiValueDict) :

data=MergeDict(<QueryDict: {u'owner': [u'6'], u'description': [u'this
is p1'], u'name': [u'p1']}>, <MultiValueDict: {u'image':
[<InMemoryUploadedFile: file.jpg (image/jpeg)>]}>)


我认为“MultiValueDict”来自这部分代码:
formData.appendPartWithFileData(imageData!, name: "image", fileName: "dummy.jpg", mimeType: "image/jpeg")

但是,我想要 MultiValueDict像这样: {u'groupImages': [{u'image': [<InMemoryUploadedFile: file.jpg (image/jpeg)>]}]}

数据格式是一个Dictionary,有一个数组值,数组有另一个Dictionary值。

那么我该怎么做才能使formData.appendPartWithFileData变成这样上面的数据格式?


编辑:

我看过一些与我的问题类似的帖子。例如这个:AFNetworking post image in nested json

我试过这样修改我的代码:

formData.appendPartWithFileData(imageData!, name: "groupImages[0].image", fileName: "dummy.jpg", mimeType: "image/jpeg")

formData.appendPartWithFileData(imageData!, name: "groupImages[0][image]", fileName: "dummy.jpg", mimeType: "image/jpeg")

但它们都不适合我。

我的服务器希望收到这样的 JSON:

{
"name": "p2",
"owner": 6,
"description": "this is p2",
"groupImages": [{
"image": <InMemoryUploadedFile: dummy.jpg (image/jpeg)>
}]
}

有什么想法吗?

最佳答案

当您发送一个多部分 HTTP 请求时,JSON 数据和图像数据是分开的——实际上是多个部分。可能值得一看 this answer to "What is HTTP Multipart Request"这样您就可以看到数据是如何传输的。

总而言之,JSON和图像在服务器端被合并成一个字典。图像未嵌入 JSON 中传输。它们如何合并的语义(例如,如何使用 groupImages[0][image] 这样的名称与 JSON 字典合并)由服务器,而不是您的 iOS 应用程序。

因此,您的服务器团队应该能够指定您如何命名此文件,以便它与字典正确合并。他们应该能够生成正常工作的示例 HTTP 请求(例如,使用 curl 或 Postman)。如果您的服务器有一个网络应用程序,您可以检查网络应用程序中的类似功能以查看请求在那里的样子。一旦你有一个工作请求,你可以通过将你的传出 NSURLRequest 与他们提供的示例请求进行比较来模仿它。

关于ios - AFNetworking 2.0 向服务器发送参数和图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27596477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com