这实际上必须比我做的简单。我只是没有看到任何将表单中所需参数放入字典的示例。我会把它列出来,这样任何像我一样努力看到显而易见的东西的人都会有一个例子可以使用。
下面的代码是我问题中链接的直接副本,但我会指出一些例外情况。
NSData *imageToUpload = UIImageJPEGRepresentation(uploadedImgView.image, 1.0);//(uploadedImgView.image);
if (imageToUpload)
{
NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:@"My Image Caption", @"caption", userId, @"pid", @"openSesame", @"token", @"users ip address", "ip", nil];
AFHTTPClient *client= [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://myServer"]];
NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"/uploadImage" parameters:parameters constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {
[formData appendPartWithFileData: imageToUpload name:@"file" fileName:@"temp.jpeg" mimeType:@"image/jpeg"];
}];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSDictionary *jsons = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil];
//NSLog(@"response: %@",jsons);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
if([operation.response statusCode] == 403)
{
//NSLog(@"Upload Failed");
return;
}
//NSLog(@"error: %@", [operation error]);
}];
[operation start];
}
首先要注意的是NSDictionary *parameters
. 这是您在表单中布置所需参数的地方。因此,正如您从问题中的表格中看到的那样,我需要一个:caption、pid、token 和 ip 参数以及它们各自的值。
查看表格还有一个我没有提到的参数。特别是这条线<input type="file" name="file" size="45"/>
。表单的那部分由这行代码处理。
[formData appendPartWithFileData: imageToUpload name:@"file" fileName:@"temp.jpeg" mimeType:@"image/jpeg"];
最初的问题具有@"image"
价值name:
。我为此奋斗了大约 30 分钟,试图弄清楚为什么当我注意到我的表单正在等待时,我会从服务器收到 500 响应@"file"
。一旦我改变它,一切都会正常工作。
就像注释一样,path:
参数 inmultipartFormRequestWithMethod:
被添加到 baseURL 的尾部。因此,请求将@"http://myserver/uploadImage"
按照表单操作中的要求进行。
就像我说的那样,我希望这对像我这样倾向于忽视它的人来说是显而易见的。