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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章