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

原文来自本人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];


发布了29 篇原创文章 · 获赞 8 · 访问量 9万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章