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

来源:互联网 发布:上海跳跃网络吧 编辑:程序博客网 时间:2024/06/03 19:47

原文来自本人QQ空间的转载整理。未亲自测试过,先行收藏以便日后查阅。

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


0 0