ASIHTTPRequestを使用して、iPhoneからdjango-pistonを実行しているDjangoサーバーにJSONとバイナリファイルをPOSTしようとしています
JSON文字列のみを送信する場合に機能させる方法と、ファイルのみを送信する場合に機能させる方法を知っていますが、両方を実行するのは難しいです。
したがって、ASIHTTPRequestコードから始めます
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
アイデアは大歓迎です。