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. // 接口的 AFHTTPSession 不能提供一种方法来设置进度块。相反,必须进行以下操作:
  8. // 1. 创建一个 `AFHTTPRequestSerializer`,利用此对象可以创建一个request请求.
  9. AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer];
  10. // 2. 获取一个`NSMutableURLRequest`对象.
  11. NSMutableURLRequest *request =
  12. [serializer multipartFormRequestWithMethod:@"POST"//请求方法为post
  13. URLString:@"http://xxx.xxx.xxx.xx"//上传文件URL
  14. parameters:dic//上传的其他参数
  15. constructingBodyWithBlock:^(id<AFMultipartFormData> formData)//设置请求体
  16. {
  17. [formData appendPartWithFileData:data//音乐媒体文件的data对象
  18. name:@"multipartFile"//与数据关联的参数名称,不能为nil
  19. fileName:fileName//上传的文件名,不能为nil
  20. mimeType:@"audio/mp4"];//MIME类型(例如:图片为image/jpeg.) 可以参照 http://www.iana.org/assignments/media-types/. ,不能为nil
  21. } error:&playerError];//playerError为错误对象
  22. // 3. 创建并使用 `AFHTTPRequestOperationManager`,然后创建一个异步请求操作对象`AFHTTPRequestOperation`,这个对象执行时会发送刚刚创建的`NSMutableURLRequest`请求.
  23. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  24. AFHTTPRequestOperation *operation =
  25. [manager HTTPRequestOperationWithRequest:request
  26. success:^(AFHTTPRequestOperation *operation, id responseObject) {
  27. NSLog(@"Success %@", responseObject);//上传成功后的语句块
  28. } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  29. NSLog(@"Failure %@", error.description);//上传失败的语句块
  30. }];
  31. // 4. 设置上传进度块.
  32. [operation setUploadProgressBlock:^(NSUInteger __unused bytesWritten,
  33. long long totalBytesWritten,//已上传的字节数
  34. long long totalBytesExpectedToWrite)//总字节数
  35. {
  36. //每次上传一部分数据,都会调用此块输出进度,可以在此方法中设置你的上传进度条页面
  37. NSLog(@"Wrote %lld/%lld", totalBytesWritten, totalBytesExpectedToWrite);
  38. }];
  39. //5. 开始上传任务
  40. [operation start];
 
上一篇:Android学习之——实现圆角Button


下一篇:多套方案来提高python web框架的并发处理能力