Ios 使用AFNetworking 2.0上载图像
我不明白为什么这么难。所有在线教程和文章似乎都在谈论1.0API,这是非常无用的 我尝试了几种不同的方法,得到了不同的结果。我做错了什么Ios 使用AFNetworking 2.0上载图像,ios,objective-c,afnetworking-2,Ios,Objective C,Afnetworking 2,我不明白为什么这么难。所有在线教程和文章似乎都在谈论1.0API,这是非常无用的 我尝试了几种不同的方法,得到了不同的结果。我做错了什么 上传任务-这似乎不是使用多部分表单,wtf NSMutableURLRequest *request = [self.manager.requestSerializer multipartFormRequestWithMethod:@"POST"
NSMutableURLRequest *request = [self.manager.requestSerializer multipartFormRequestWithMethod:@"POST"
URLString:[[NSURL URLWithString:url relativeToURL:[NSURL URLWithString:ApiBaseUrl]] absoluteString]
parameters:@{}
constructingBodyWithBlock:nil];
NSProgress *progress;
NSURLSessionUploadTask *task = [self.manager uploadTaskWithRequest:request
fromData:data
progress:&progress
completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
NSLog(@"[error description] = %@", [error description]);
} else {
NSLog(@"success!");
}
}];
[task resume];
[self.manager POST:url
parameters:@{}
constructingBodyWithBlock:^(id <AFMultipartFormData> formData) {
[formData appendPartWithFileData:data
name:@"post[picture]"
fileName:@"picture.jpg"
mimeType:@"image/jpeg"];
}
success:^(NSURLSessionDataTask *task, id response) {
NSLog(@"Success");
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"Error: %@", error);
}];
NSString *urlString = [[NSURL URLWithString:kPhotoUploadPath relativeToURL:self.baseURL] absoluteString];
NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:urlString parameters:params constructingBodyWithBlock:^(id <AFMultipartFormData> formData) {
[formData appendPartWithFileData:photo.data name:@"photo" fileName:@"photo.jpg" mimeType:@"image/jpeg"];
}];
NSURLSessionUploadTask *task = [self uploadTaskWithStreamedRequest:request progress:progress completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
if (error) {
if (failure) failure(error);
} else {
if (success) success(responseObject);
}
}];
[task resume];
NSString*urlString=[[NSURL URLWithString:kPhotoUploadPath relativeToURL:self.baseURL]absoluteString];
NSMutableURLRequest*request=[self.requestSerializer multipartFormRequestWithMethod:@“POST”URLString:URLString参数:params constructingBodyWithBlock:^(id formData){
[formData appendPartWithFileData:photo.data名称:@“photo”文件名:@“photo.jpg”mimeType:@“image/jpeg”];
}];
NSURLSessionUploadTask*task=[self-uploadTaskWithStreamedRequest:请求进度:进度完成处理程序:^(NSURResponse*\uu未使用的响应,id响应对象,NSError*error){
如果(错误){
如果(失败)失败(错误);
}否则{
if(success)success(responseObject);
}
}];
[任务恢复];
或者,如果您不需要跟踪上传进度,您可以简单地使用:
[self POST:kPhotoUploadPath parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:photo.data name:@"photo" fileName:@"photo.jpg" mimeType:@"image/jpeg"];
} success:^(NSURLSessionDataTask *task, id responseObject) {
if (success) success(responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
if (failure) failure(error);
}];
[self-POST:kPhotoUploadPath参数:params-constructionbodywithblock:^(id-formData){
[formData appendPartWithFileData:photo.data名称:@“photo”文件名:@“photo.jpg”mimeType:@“image/jpeg”];
}成功:^(NSURLSessionDataTask*任务,id响应对象){
if(success)success(responseObject);
}失败:^(NSURLSessionDataTask*任务,NSError*错误){
如果(失败)失败(错误);
}];
雷·利利利怀特(Ray Lillywhite)所描述的效果非常好(我会在他的帖子上发表评论,但我的声誉太低)
multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:
的帮助下,创建一个NSMutableURLRequest
。
- 使用
方法之一构建表单数据appendPartWith…
uploadTaskWith…
方法获取(上载)数据任务。如果要使用NSProgress
输入参数,则需要使用uploadTaskWithStreamedRequest:progress:completionHandler:
李>
在步骤1中使用
NSURLSessionUploadTask
时,从何处获取数据?我正在做类似的事情(虽然不是一篇多部分文章),首先构建请求,然后使用request.HTTPBody
作为数据。您是否能够解决此问题。。我也有同样的问题。。我也需要发送带有图像的参数。。尝试了所有三种可能的方法。。你提到。。但是没有人在工作。。。afnetworking也没有提供任何示例…您已经解决了它。我有类似的问题,你能帮我吗?恐怕第一个答案不正确,因为uploadTaskWithStreamedRequest:
用于流式请求,即通过持久的URL连接。我不认为这是“流式”在本文中的意思。这可能只是指它是一个由多部分组成的表单请求:我的理解是请求主体是流式的,但连接不是持久的,并且在请求完成后关闭。这是上传文件的标准请求类型uploadTaskWithStreamedRequest:
也被网络…constructingBodyWithBlock:…
方法使用。@RayLillywhite但当我检查我的photo.data时,它是零,你能看看我的类似问题吗
[self POST:kPhotoUploadPath parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:photo.data name:@"photo" fileName:@"photo.jpg" mimeType:@"image/jpeg"];
} success:^(NSURLSessionDataTask *task, id responseObject) {
if (success) success(responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
if (failure) failure(error);
}];