AFNetworking 上传文件
Posted
技术标签:
【中文标题】AFNetworking 上传文件【英文标题】:AFNetworking Uploading a file 【发布时间】:2011-11-22 21:39:59 【问题描述】:有没有人使用 的完整实现。我在互联网上找到了一些代码,但它不完整。我找到的代码在这里:
AFHTTPClient *client= [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://my.client.server.com"]];
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
[parameters setObject:[fieldName text] forKey:@"field01_nome"];
[parameters setObject:[fieldSurname text] forKey:@"field02_cognome"];
NSMutableURLRequest *myRequest = [client multipartFormRequestWithMethod:@"POST" path:@"/Contents/mail/sendToForm.jsp" parameters:parameters constructingBodyWithBlock: ^(id <AFMultipartFormData>formData)
[formData appendPartWithFileData:myNSDataToSend mimeType:@"image/jpeg" name:@"alleagto"];
];
AFHTTPRequestOperation *operation = [AFHTTPRequestOperation HTTPRequestOperationWithRequest:myRequest success:^(id object)
NSLog(@"Success");
failure:^(NSHTTPURLResponse *response, NSError *error)
NSLog(@"Fail");
];
[operation setUploadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite)
NSLog(@"Sent %d of %d bytes", totalBytesWritten, totalBytesExpectedToWrite);
];
queue = [[[NSOperationQueue alloc] init] autorelease];
[queue addOperation:operation];
我在以下几行中遇到错误:
[formData appendPartWithFileData:myNSDataToSend mimeType:@"image/jpeg" name:@"alleagto"];
在 myNSDataToSend。
这里:
AFHTTPRequestOperation *operation = [AFHTTPRequestOperation HTTPRequestOperationWithRequest:myRequest success:^(id object)
NSLog(@"Success");
failure:^(NSHTTPURLResponse *response, NSError *error)
NSLog(@"Fail");
];
错误是:
找不到类方法'+HTTPRequestOperationWithRequest:success:failure'(返回类型默认为'id')
在这方面的任何帮助以及使用 AFNetworks 上传都会很棒。
谢谢。
【问题讨论】:
【参考方案1】:首先,确保您已下载最新版本的 AFNetworking。
AFHTTPRequestOperation +HTTPRequestOperationWithRequest:success:failure:
被删除了几个版本。相反,您可以执行 [[AFHTTPRequestOperation alloc] initWithRequest:...]
,然后使用直接属性访问器 (operation.completionBlock = ^...
) 或 -setCompletionBlockWithSuccess:failure:
设置 completionBlock
。请记住,完成块在请求完成下载后执行。
至于多部分表单块,-appendWithFileData:mimeType:name
不久前也被删除了。你想要的方法是-appendPartWithFileData:name:fileName:mimeType:
。
进行这两项更改,一切都会正常。
【讨论】:
嗯,我仍然 (a) 在 AFHTTPClient.m 中找到该方法,并且 (b) 出现编译错误。除了我的错误说“匿名类的声明必须是一个定义”。我在哪里可以解决这个问题? @mattt,我可以在使用multipartFormRequestWithMethod
方法上传图像时将内容类型从multipart/form-data;
更改为image/jpeg
吗?需要你的帮助!
@AlmasAdilbek 否。您发送的是包含 JPEG 部分的多部分表单,而不是 JPEG 本身。
@mattt 面临同样的问题,正在寻找一些允许我发布一个文件的功能。以上是关于AFNetworking 上传文件的主要内容,如果未能解决你的问题,请参考以下文章