Използвам 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)")
})
От страната на сървъра данните ще бъдат dictionary
обединени от parameters(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)>]}]}
Форматът на данните е речник със стойност на масив, а масивът има друга стойност на речник.
И така, какво мога да направя, за да направя formData.appendPartWithFileData
такъв по-горе формат на данни?
РЕДАКТИРАНЕ:
Виждал съм някои публикации, подобни на моя въпрос. Например този: Изображение на публикация в AFNetworking във вложен json
Опитах се да променя кода си по следния начин:
formData.appendPartWithFileData(imageData!, name: "groupImages[0].image", fileName: "dummy.jpg", mimeType: "image/jpeg")
or
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)>
}]
}
Някаква идея?