iOS_文件上傳進度條的實現思路-AFNettworking
- //要上傳的文件名,在這里我使用當前日期做為文件的名稱
- 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];