距上一篇IOS AFNETWork 附件上传博文发布已有数月之久,最近在项目中又有了变态的需求在一个页面中有多个附件域,但是接口只有一个。于是边翻看AFNetwork 的api 最终找到了这样一个结构
NSURLSessionDataTask *task = [httpClient POST:url parameters:parame constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[mutilableBodys enumerateObjectsUsingBlock:^(NSDictionary *cellBodyDic, NSUInteger idx, BOOL *stop) {
[formData appendPartWithFileData:cellBodyDic[@"body"] name:cellBodyDic[@"name"] fileName:cellBodyDic[@"fileName"] mimeType:cellBodyDic[@"mimeType"] ];
}];
} success:^(NSURLSessionDataTask *task, id responseObject) {
if (completBlock) {
completBlock(responseObject,nil);
}
} failure:^(NSURLSessionDataTask *task, NSError *error) {
if (completBlock) {
completBlock(nil,error);
}
}];
最后和服务端测试发现文件上传成功了,兴奋之余写下本文,用作日后查询之用
全文内容如下
+(NSURLSessionDataTask *)upLoadFileSWithAction:(NSString *)url andFileItem:(NSDictionary *)fileItemDic andFileType:(NSDictionary *)fileTypeDic andUploadedSize:(NSUInteger)hsize andParames:(NSDictionary *)parame CompleteBlock:(void(^)(id responseObject,NSError *error))completBlock{
AFAppDotNetAPIClient *httpClient = [AFAppDotNetAPIClient sharedClient];
NSString *stringBoundary = @"----WebKitFormBoundarygTijO0scBddIKz8T";
NSString *hhh_date =[NSString stringWithFormat:@"\r\n--%@\r\n", stringBoundary];
NSMutableArray *mutilableBodys =[NSMutableArray array];
NSArray *fNameKeys = [fileItemDic allKeys];
for (NSString *fNameKey in fNameKeys) {
NSMutableData *postBody = [[NSMutableData alloc] init];
NSString *filePath =[fileItemDic objectForKey:fNameKey];
NSString *fNameValue = [[filePath pathComponents]lastObject];
NSString *nameValue =[fNameValue stringByDeletingPathExtension];
NSData *imageData = [NSData dataWithContentsOfFile:filePath];
NSString *fileType = [fileTypeDic objectForKey:fNameKey];
[postBody appendData:[[NSString stringWithFormat:@"\r\n\r\n--%@\r\n", stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n",fNameKey,fNameValue] dataUsingEncoding:NSUTF8StringEncoding]];
NSString *contentFileType =[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n",fileType];
[postBody appendData:[contentFileType dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:imageData];
[postBody appendData:[hhh_date dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[@"Content-Disposition: form-data; name=\"timestamp\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[@"0.38387341564521194" dataUsingEncoding:NSUTF8StringEncoding]];
NSDictionary *cellBodyDic =@{@"body":postBody,@"name":nameValue, @"fileName":fNameValue, @"mimeType":fileType};
[mutilableBodys addObject:cellBodyDic];
}
NSURLSessionDataTask *task = [httpClient POST:url parameters:parame constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[mutilableBodys enumerateObjectsUsingBlock:^(NSDictionary *cellBodyDic, NSUInteger idx, BOOL *stop) {
[formData appendPartWithFileData:cellBodyDic[@"body"] name:cellBodyDic[@"name"] fileName:cellBodyDic[@"fileName"] mimeType:cellBodyDic[@"mimeType"] ];
}];
} success:^(NSURLSessionDataTask *task, id responseObject) {
if (completBlock) {
completBlock(responseObject,nil);
}
} failure:^(NSURLSessionDataTask *task, NSError *error) {
if (completBlock) {
completBlock(nil,error);
}
}];
return task;
}