iOS_文件上传进度条的实现思路-AFNettworking

 

iOS_文件上传进度条的实现思路-AFNettworking

  1. //要上传的文件名,在这里我使用当前日期做为文件的名称  
  2.       NSString * fileName =[NSString stringWithFormat:@"%ld", (long)[NSDatenew].timeIntervalSince1970];  
  3.       //要上传的文件   
  4.       NSData * data = [NSData dataWithContentsOfFile:[XXXXXXXX]];  
  5.           //下面的dic就是一些其他的参数,没有就不要了   
  6.             NSDictionary *dic = @{@"jsessionid": [User shareUser].sessionID,@"to":[UsershareUser].userID,@"fromUserId":self.toUserID,@"second":@((int)recorder.currentTime)};  
  7.         
  8.      // 接口的 AFHTTPSession 不能提供一种方法来设置进度块。相反,必须进行以下操作:  
  9.       // 1. 创建一个 `AFHTTPRequestSerializer`,利用此对象可以创建一个request请求.  
  10.       AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer];  
  11.         
  12.       // 2. 获取一个`NSMutableURLRequest`对象.  
  13.       NSMutableURLRequest *request =  
  14.       [serializer multipartFormRequestWithMethod:@"POST"//请求方法为post  
  15.                                        URLString:@"http://xxx.xxx.xxx.xx"//上传文件URL  
  16.                                       parameters:dic//上传的其他参数  
  17.                        constructingBodyWithBlock:^(id<AFMultipartFormData> formData)//设置请求体  
  18.       {  
  19.                         [formData appendPartWithFileData:data//音乐媒体文件的data对象  
  20.                                                                   name:@"multipartFile"//与数据关联的参数名称,不能为nil  
  21.                                                               fileName:fileName//上传的文件名,不能为nil  
  22.                                                               mimeType:@"audio/mp4"];//MIME类型(例如:图片为image/jpeg.) 可以参照 http://www.iana.org/assignments/media-types/. ,不能为nil  
  23.       } error:&playerError];//playerError为错误对象  
  24.       // 3. 创建并使用 `AFHTTPRequestOperationManager`,然后创建一个异步请求操作对象`AFHTTPRequestOperation`,这个对象执行时会发送刚刚创建的`NSMutableURLRequest`请求.  
  25.       AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
  26.       AFHTTPRequestOperation *operation =  
  27.       [manager HTTPRequestOperationWithRequest:request  
  28.                                        success:^(AFHTTPRequestOperation *operation, id responseObject) {  
  29.                                            NSLog(@"Success %@", responseObject);//上传成功后的语句块  
  30.                                        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
  31.                                            NSLog(@"Failure %@", error.description);//上传失败的语句块  
  32.                                        }];  
  33.         
  34.       // 4. 设置上传进度块.  
  35.       [operation setUploadProgressBlock:^(NSUInteger __unused bytesWritten,  
  36.                                           long long totalBytesWritten,//已上传的字节数  
  37.                                           long long totalBytesExpectedToWrite)//总字节数  
  38.       {  
  39.           //每次上传一部分数据,都会调用此块输出进度,可以在此方法中设置你的上传进度条页面  
  40.           NSLog(@"Wrote %lld/%lld", totalBytesWritten, totalBytesExpectedToWrite);  
  41.       }];  
  42.       //5. 开始上传任务  
  43.       [operation start];  
 
原文地址:https://www.cnblogs.com/LiLihongqiang/p/6862411.html