我是这篇HTML表单帖子的新手,所以我在使用AFNetworking破解如何将这个html表单实现到帖子时遇到了一些麻烦。我需要添加从我的应用程序上传图像到服务器的功能。有人可以引导我解决这个问题。
这是我要使用的HTML表单。
<form action="http://myserver/uploadImage" method="post" enctype="multipart/form-data">
<input type="file" name="file" size="45"/>
<input type="text" name="caption" size="80"/>
<input type="submit" value="Upload It"/>
<input type="hidden" name="pid" value="the user id"/>
<input type="hidden" name="token" value="a token"/>
<input type="hidden" name="ip" value="an IPaddress"/>
</form>
我找到了一堆像下面这样的例子,所以我对使用的方法有了很好的处理。然而,对我来说,脱节是如何以及在何处放置上面的html表单中包含的每个字段 send image along with other parameters with AFNetworking
答案 0 :(得分:1)
这实际上必须比我做的更简单。我只是没有看到任何将表单中所需参数放入字典的示例。我会把它解决,所以任何努力看到像我这样明显的人都会有一个例子可以使用。
以下代码是我问题中链接的直接副本,但我会指出一些例外情况。
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:
。当我注意到我的表单期待@"file"
时,我试图找出为什么我从服务器得到500响应,我打了大约三十分钟。一旦我改变它,一切正常。
注意,path:
中的multipartFormRequestWithMethod:
参数会添加到baseURL的尾端。因此,请求将根据表单的操作要求转到@"http://myserver/uploadImage"
。
就像我说的那样,我希望这对那些像我这样倾向于忽视它的人来说是显而易见的。