Jer*_*ith 10 objective-c ios afnetworking-2
我不明白为什么这么难.在线的所有教程和文章似乎都在谈论1.0 api,这是非常没用的.
我尝试了几种不同的方法,得到了不同的结果.我究竟做错了什么?
上传任务 - 这似乎不是使用多部分形式,wtf?
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];
Run Code Online (Sandbox Code Playgroud)发布一个块 - 这似乎没有附加任何东西
[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);
}];
Run Code Online (Sandbox Code Playgroud)简单的帖子 - 这似乎几乎可以工作......但不是
[self.manager POST:url
parameters:@{@"post[picture][]":data}
success:^(NSURLSessionDataTask *task, id response) {
NSLog(@"Success");
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"Error: %@", error);
}];
Run Code Online (Sandbox Code Playgroud)我很乐意1来工作,但我不确定为什么不工作.
Ray*_*ite 14
对于正确形成的"multipart/form-data"主体,您需要在创建请求时使用body构造块.否则,上载任务将使用原始数据作为正文.例如,在AFHTTPSessionManager子类中:
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];
Run Code Online (Sandbox Code Playgroud)
或者,如果您不需要跟踪上传进度,则可以使用:
[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);
}];
Run Code Online (Sandbox Code Playgroud)
Ray Lillywhite描述的内容完美无缺(我会对他的帖子发表评论,但我的声誉太低了).
NSMutableURLRequest在...的帮助下创建multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:.
appendPartWith...方法构建表单数据.uploadTaskWith...方法获取(上传)数据任务.你需要使用uploadTaskWithStreamedRequest:progress:completionHandler:,如果你想使用的NSProgress输入参数.| 归档时间: |
|
| 查看次数: |
15873 次 |
| 最近记录: |