我正在尝试使用 ASIHTTPRequest 将一些 JSON 和二进制文件从 iPhone 发布到运行 django-piston 的 Django 服务器
如果我只发送 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
欢迎提出想法。