Я пытаюсь отправить JSON и двоичный файл с iPhone на сервер Django с запущенным django-поршнем, используя ASIHTTPRequest
Я знаю, как заставить его работать, если я ТОЛЬКО отправляю строки JSON, и я знаю, как заставить его работать, если ТОЛЬКО отправляю файл, но делать то и другое сложно.
Итак, начнем с кода запроса ASIHTTP
ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:url];
[request setRequestMethod:@"POST"];
[request setPostFormat:ASIMultipartFormDataPostFormat];
[request appendPostData:[@"{\"save\":{\"name\":\"iostest\"}}" dataUsingEncoding:NSUTF8StringEncoding]];
[request addData:UIImageJPEGRepresentation([UIImage imageNamed:@"test.jpg"], 1.0f)
withFileName:@"test.jpg"
andContentType:@"image/jpeg"
forKey:@"data"];
[request setDelegate:self];
[request startAsynchronous];
Моя лучшая идея заключается в том, что добавление необработанных строковых данных непосредственно в тело POST, а затем добавление файла просто не работает.
Но если я вместо этого попробую
[request setPostValue:@"{\"name\":\"iostest\"}" forKey:@"save"];
Тогда словарь данных поршня будет хранить ['save'] как строку вместо десериализованного объекта, так что он буквально доставит строку
"{\"name\":\"iostest\"}"
Вот мой код обработчика поршня
def create(self, request):
data = request.data
print(data['save']) #{\"name\":\"iostest\"}"
print("Files: " + request.FILES['data'].name) #test.jpg
print("Data Save Name: " + data['save']['name']) #crash, interprets this as a string indeces lookup
Идеи приветствуются.